Python 将列表转换为RDD

Python 将列表转换为RDD,python,pyspark,rdd,pyspark-sql,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],

我试图在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")}

您的问题是在并行化列表上调用了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")

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

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

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")
如果您想要分区的文件,不要使用coalesce。

不要调用
collect()
-它将RDD收集到一个本地列表中,这使您的
RDD
temp
变量列表而不是RDD(这样您就不需要“temp”-无需收集然后并行化)