【发布时间】:2022-01-21 03:05:45
【问题描述】:
使用spark.read.csv('path to file') 读取CSV 文件时。它过滤掉所有空行。
- 它这样做的原因是什么?
- 有没有办法改变这种情况?
【问题讨论】:
标签: csv apache-spark apache-spark-sql
使用spark.read.csv('path to file') 读取CSV 文件时。它过滤掉所有空行。
【问题讨论】:
标签: csv apache-spark apache-spark-sql
将 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)但它保持为空行。
【讨论】:
.option("mode", "PERMISSIVE") 时,我需要检查。