使用Pyspark读取带有换行符的CSV文件。

6

使用Pyspark读取带有换行符(CRLF)的“合法”CSV文件(它遵循RFC4180)。下面的代码示例展示了在Notepad++中打开时它的样子:

enter image description here

我尝试使用sqlCtx.read.load读取,格式为='com.databricks.spark.csv。在这些特定情况下,结果数据集显示两行而不是一行。我正在使用Spark 2.1.0.2版本。

是否有任何命令或替代方法可以读取csv文件,并将这两行仅作为一行读取?

2个回答

2
整个文件(再次?)在Spark API文档中不存在: https://spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html 以下解决方案可行:
spark.read.option("multiLine", "true").csv("file.csv")

从API文档中得知:

multiLine - 解析可能跨越多行的记录。如果未设置为None,则使用默认值false。


2
你可以使用 "csv" 代替 Databricks CSV - 后者现在将重定向到默认的 Spark reader。但这只是一个提示 :)
在 Spark 2.2 中添加了一个新选项 - wholeFile。如果你写下这个:
spark.read.option("wholeFile", "true").csv("file.csv")

它将读取所有文件并处理多行CSV。

在Spark 2.1中没有这样的选项。您可以使用sparkContext.wholeTextFile读取文件,或者使用更新的版本。


我认为这个解决方案只在你只有两行并且想要将它们合并成一行时才有用。但是如果你有100行,而问题出现在第50行呢?那么只需要修复第50行和第51行,最终我们应该有99行。 - daloman
@daloman 我不明白。Spark会自动识别哪些行应该合并。 - T. Gawęda
据我阅读文档所理解,此选项将整个文件作为一行返回。因此,它会将所有行合并为一行。 - daloman
@daloman SparkContext.wholeFile - 是的。这就是为什么你必须手动解析它的原因。在Spark 2.2中,DataFrameReader有一个选项,会有正常的行,而不是一个文件作为字符串。 - T. Gawęda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接