为啥 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 会过滤掉空行?的主要内容,如果未能解决你的问题,请参考以下文章