为啥 spark csv 会过滤掉空行?

Posted

技术标签:

【中文标题】为啥 spark csv 会过滤掉空行?【英文标题】:Why spark csv filters out empty rows?为什么 spark csv 会过滤掉空行? 【发布时间】:2022-01-21 03:05:45 【问题描述】:

使用spark.read.csv('path to file') 读取CSV 文件时。它过滤掉所有空行。

    它这样做的原因是什么? 有没有办法改变这种情况?

【问题讨论】:

【参考方案1】:

将 CSV 字符串解析为 InternalRow 时,Spark 会在内部过滤空行。你可以在code看到:

/**
   * Filter ignorable rows for CSV dataset (lines empty and starting with `comment`).
   * This is currently being used in CSV schema inference.
   */
  def filterCommentAndEmpty(lines: Dataset[String], options: CSVOptions): Dataset[String]

不知道你为什么要找一种方法来改变它,一个空行根本不代表什么,因为它不包含任何数据,那么你为什么要保留它以及在这种情况下应该如何解析它?不要与格式错误(损坏)的记录混淆,您可以在 CSV 数据源选项中使用 mode 处理这些记录。


编辑

如果您确实需要在数据框中保留空行,则可以将其读取为文本而不是 CSV:

val df = spark.read.text("path")

数据框将只有一列 value,您必须自己将其解析为多列(例如,使用 split 函数,或者如果您有 Spark 3+,则使用 from_csv)但它保持为空行。

【讨论】:

当 spark 过滤空行时,我不知道我的文件已损坏并且行已损坏,当使用 .option("mode", "PERMISSIVE") 时,我需要检查。 当spark过滤这些行时,我不知道它们存在于文件中......所以我不明白你的答案。 阅读文本和解析将需要许多错误处理等。查看代码很容易为我的案例添加配置,因此 spark 将能够重现 excel 的行为, sqlldr、Postgres 加载器等

以上是关于为啥 spark csv 会过滤掉空行?的主要内容,如果未能解决你的问题,请参考以下文章

通过 python 将 txt 转换为 CSV:为啥会出现额外的空行? [复制]

请问如何把文件中的空行过滤掉(要求命令行实现)

如何去掉linux配置文件的注释行和空行

使用 Python 写入 CSV 会添加空行 [重复]

csv.writer写入文件有多余的空行

linux过滤旧文件中的空行和注释行剩余内容组成新文件