首页 > 解决方案 > 如何编写标准 CSV

问题描述

读取标准 CSV文件非常简单,例如:

 val t = spark.read.format("csv")
 .option("inferSchema", "true")
 .option("header", "true")
 .load("file:///home/xyz/user/t.csv")

它读取一个真正的 CSV 文件,例如

   fieldName1,fieldName2,fieldName3
   aaa,bbb,ccc
   zzz,yyy,xxx

t.show产生了预期的结果。

我需要相反,来编写标准 CSV 文件(不是非标准文件的目录)。

使用时看不到相反的结果是非常令人沮丧的write 。也许其他一些选择或某种format (" REAL csv please! ")存在。


笔记

我正在使用 Spark v2.2并在Spark-shell上运行测试。

read的“语法逆”是write,因此预计会产生相同的文件格式。但结果

   t.write.format("csv").option("header", "true").save("file:///home/xyz/user/t-writed.csv")

不是rfc4180标准格式的 CSV 文件,就像原始 t.csv的 .t-writed.csv/part-00000-66b020ca-2a16-41d9-ae0a-a6a8144c7dbc-c000.csv.deflate _SUCCESS

任何具有“读某物”的完整工具包的语言都能够“写某物”,这是一种正交性原则

类似不解决

未解决问题的类似问题或链接,可能使用了不兼容的 Spark 版本,或者spark-shell使用它的限制。他们为专家提供了很好的线索:

标签: apache-sparkexport-to-csv

解决方案


如果数据框不是太大,您可以尝试:

df.toPandas().to_csv(path)

如果数据框很大,您可能会出现内存不足错误或打开文件过多错误。


推荐阅读