如何在 pyspark 中将 spark 数据框保存为没有行的文本文件?
How to save a spark dataframe as a text file without Rows in pyspark?
我有一个包含列 ['name'、'age'] 的数据框 "df"
我使用 df.rdd.saveAsTextFile("..")
将数据帧保存为 rdd。我加载了保存的文件,然后 collect() 给了我以下结果。
a = sc.textFile("\mee\sample")
a.collect()
Output:
[u"Row(name=u'Alice', age=1)",
u"Row(name=u'Alice', age=2)",
u"Row(name=u'Joe', age=3)"]
这不是行的 rdd。
a.map(lambda g:g.age).collect()
AttributeError: 'unicode' object has no attribute 'age'
有什么方法可以将数据帧保存为没有列名和行关键字的普通 rdd 吗?
我想保存数据框,以便在加载文件和收集时给我如下信息:
a.collect()
[(Alice,1),(Alice,2),(Joe,3)]
这是正常的RDD[Row]
。问题是你,当你 saveAsTextFile
并用 textFile
加载时,你得到的是一堆字符串。如果你想保存对象,你应该使用某种形式的序列化。例如 pickleFile
:
from pyspark.sql import Row
df = sqlContext.createDataFrame(
[('Alice', 1), ('Alice', 2), ('Joe', 3)],
("name", "age")
)
df.rdd.map(tuple).saveAsPickleFile("foo")
sc.pickleFile("foo").collect()
## [('Joe', 3), ('Alice', 1), ('Alice', 2)]
我想你可以这样做:
a.map(lambda x:(x[0],x[1])).collect()
我有一个包含列 ['name'、'age'] 的数据框 "df"
我使用 df.rdd.saveAsTextFile("..")
将数据帧保存为 rdd。我加载了保存的文件,然后 collect() 给了我以下结果。
a = sc.textFile("\mee\sample")
a.collect()
Output:
[u"Row(name=u'Alice', age=1)",
u"Row(name=u'Alice', age=2)",
u"Row(name=u'Joe', age=3)"]
这不是行的 rdd。
a.map(lambda g:g.age).collect()
AttributeError: 'unicode' object has no attribute 'age'
有什么方法可以将数据帧保存为没有列名和行关键字的普通 rdd 吗? 我想保存数据框,以便在加载文件和收集时给我如下信息:
a.collect()
[(Alice,1),(Alice,2),(Joe,3)]
这是正常的RDD[Row]
。问题是你,当你 saveAsTextFile
并用 textFile
加载时,你得到的是一堆字符串。如果你想保存对象,你应该使用某种形式的序列化。例如 pickleFile
:
from pyspark.sql import Row
df = sqlContext.createDataFrame(
[('Alice', 1), ('Alice', 2), ('Joe', 3)],
("name", "age")
)
df.rdd.map(tuple).saveAsPickleFile("foo")
sc.pickleFile("foo").collect()
## [('Joe', 3), ('Alice', 1), ('Alice', 2)]
我想你可以这样做:
a.map(lambda x:(x[0],x[1])).collect()