如何在没有pyspark中的行的情况下将火花数据帧保存为文本文件?

时间:2015-12-04 08:28:18

标签: python apache-spark pyspark

我有一个数据框" df"列[' name',' age'] 我使用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)]

2 个答案:

答案 0 :(得分:1)

这是正常的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)]

答案 1 :(得分:0)

我认为你可以这样做:

a.map(lambda x:(x[0],x[1])).collect()