Python 使用拆分列将RDD写入csv

Python 使用拆分列将RDD写入csv,python,csv,pyspark,Python,Csv,Pyspark,我刚刚开始使用Pyspark,希望将文件保存为csv而不是文本文件。我尝试使用在堆栈溢出上找到的几个答案,例如 def toCSVLine(data): return ','.join(str(d) for d in data) 然后 rdd = lines.map(toCSVLine) rdd.saveAsTextFile("file.csv") 它的工作原理是我可以在excel中打开它,但是所有信息都放在电子表格的A列中。我希望能够将rdd中的每一列(例如,“ID”、“评级”)

我刚刚开始使用Pyspark,希望将文件保存为csv而不是文本文件。我尝试使用在堆栈溢出上找到的几个答案,例如

def toCSVLine(data):
   return ','.join(str(d) for d in data)
然后

 rdd = lines.map(toCSVLine)
 rdd.saveAsTextFile("file.csv")

它的工作原理是我可以在excel中打开它,但是所有信息都放在电子表格的A列中。我希望能够将rdd中的每一列(例如,“ID”、“评级”)放在excel中的一个单独的列中,这样ID将在列a中,评级将在列B中。有什么方法可以做到这一点吗?

在excel中,您是否在“,”上拆分文件

在excel中,转到“数据”选项卡,在“数据工具”下选择“文本到列”,然后选择“分隔的”,点击“下一步”。然后选择“逗号”作为分隔符,点击“完成”

编辑

一般来说,如果数据中有逗号,最好使用不同于逗号的分隔符来创建csv。如果要创建csv,请根据您的注释使用不同的分隔符(例如“;”、“|“、“^”或制表符)。另一个我不太喜欢的选项是将有问题的字段用“”像这样包装:

field0,field1,"field,2",field3

Excel应该保留引号中的内容,只在引号外用逗号分隔。但这也不是我的首选解决方案。

如果您使用的是Spark>=2.0,并且假设您的RDD具有表格格式(如果您希望将其另存为CSV,则应该使用表格格式)一种方法可能是首先从RDD创建数据帧,然后使用导出到CSV

from pyspark.sql import SparkSession

spark = SparkSession(sc).getOrCreate()

df = spark.createDataframe(rdd)

df.write.csv("/path/to/file.csv", sep=',', header=True)

查看其他选项和更多信息。

一个选项是将RDD转换为dataframe,然后另存为CSV

from pyspark import SparkContext
df = sqlContext.createDataFrame(rdd, ['count', 'word'])
# Write CSV (I have HDFS storage)
df.coalesce(1).write.format('com.databricks.spark.csv').options(header='true').save('file:///home/username/csv_out')
请看我刚发的帖子:

我确实尝试过这种方法,但它将一行包含多个逗号的文本的其中一列拆分为多列。有没有办法在忽略引号内的逗号时使用这种方法?有没有办法在忽略引号内的逗号时使用逗号作为分隔符?字符串内的逗号应该可以,字符串应该可以自动引用。您是否尝试过选项
sep
quote
escape
等?这确实有效,但有没有办法让它忽略引号内的逗号?它将一行文本拆分成多个列,因为其中包含一些逗号。您可能可以使用另一个分隔符。option(“delimiter”、“|”)并在打开时使用该分隔符。好的,我能够让它使用此代码。感谢您的帮助。
合并(1)
这里有问题。如果数据不适合一个分区怎么办?我认为更明智的做法是跳过
合并
并使用其他工具(例如命令行上的
cat
或标准python文件操作)合并生成的文件