将列表转换为RDD

时间:2018-04-17 14:02:02

标签: python pyspark rdd pyspark-sql

我正在尝试在pyspark中处理samplecsv.csv文件(64 MB)。 此代码生成错误: AttributeError:'list'对象没有属性'saveAsTextFile'

我想我已经使用parallelize将列表转换为RDD了。如果没有,它是如何完成的?

file = sc.textFile('/user/project/samplecsv.csv',5)
rdd = file.map(lambda line: (line.split(',')[0], line.split(',')[1], 
                             line.split(',')[2], line.split(',')[3], 
                             line.split(',')[4])).collect()
temp = sc.parallelize([rdd], numSlices=50000).collect()
temp.saveAsTextFile("/user/project/newfile.txt")}

2 个答案:

答案 0 :(得分:0)

您的问题是您在并行列表上调用了collect,并将其返回到正常的python列表。

此外,除非您正在进行测试/调试过程,否则不应在每个步骤中调用collect。否则你不会利用Spark计算模型。

# loads the file as an rdd 
file = sc.textFile('/user/project/samplecsv.csv',5)
# builds a computation graph
rdd = file.map(lambda line: (line.split(',')[0], line.split(',')[1], 
                             line.split(',')[2], line.split(',')[3], 
                             line.split(',')[4]))
# saves the rdd to the filesystem
rdd.saveAsTextFile("/user/project/newfile.txt")

此外,您只需将行拆分一次即可使代码更加优化。

答案 1 :(得分:0)

我认为您应该尝试以下代码,它将解决您的目的:

file = sc.textFile("C://Users/Ravi/Desktop/test.csv",5)
rdd = file.map(lambda line: (line.split(',')[0], line.split(',')[1], 
                             line.split(',')[2], line.split(',')[3]))
rdd.coalesce(1).saveAsTextFile("C://Users/Ravi/Desktop/temp")

如果您想要分区文件,请不要使用合并。