【问题标题】:Read CSV with linebreaks in pyspark在 pyspark 中读取带有换行符的 CSV
【发布时间】:2018-02-23 11:10:45
【问题描述】:

在 pyspark 中读取带有换行符的 CSV 我想用 pyspark 阅读一个“合法的”(它遵循RFC4180)CSV,它在某些行中有断线(CRLF)。下一个代码示例显示了使用 Notepad++ 打开它时的样子:

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

是否有任何读取 csv 的命令或替代方法允许我将这两行仅作为一个读取?

【问题讨论】:

    标签: python-3.x csv apache-spark pyspark


    【解决方案1】:

    您可以使用“csv”代替 Databricks CSV - 最后一个现在重定向到默认的 Spark 阅读器。但是,这只是一个提示:)

    在 Spark 2.2 中添加了新选项 - wholeFile。如果你这样写:

    spark.read.option("wholeFile", "true").csv("file.csv")
    

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

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

    【讨论】:

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

    wholeFile 在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多