Spark - 处理 CSV 文件中的空白值

Spark - handle blank values in CSV file

假设我有一个简单的管道分隔文件,缺少值:

A|B||D

我将其读入数据框:

val foo =  spark.read.format("csv").option("delimiter","|").load("/path/to/my/file.txt")

缺少的第三列不是空值,而是空字符串:

+-----------+----+
|_c0|_c1| _c2|_c3|
+-----------+----+
|a  |b  |null|c  |

我希望能够控制 Spark 对缺失值的处理。根据CSV Documentation,有一个nullValue选项:

nullValue: string that indicates a null value, any fields matching this string will be set as nulls in the DataFrame.

但是因为我在那里没有任何价值,我似乎无法那样控制它。

没有测试我读入的每个文件的每个字段,有没有办法控制 spark 对这些空白的处理?例如,将其替换为 'N/A'.

如果相关的话,我们正在使用 Spark 2.1。

nullValueemptyValue 选项与您的期望相反 - 它们允许您指定值,如果在源数据中遇到这些值,则应转换为 null""(分别)在结果数据框中。例如,如果您的输入是

a|b|N/A|d

你设置

option("nullValue", "N/A")

你会再次结束

+-----------+----+
|_c0|_c1| _c2|_c3|
+-----------+----+
|a  |b  |null|c  |

更重要的是,Spark 在 class DataFrameNaFunctions 中包含用于处理空值的函数。例如,df.na.fill("N/A") 会将字符串列中的所有 null 实例替换为 "N/A"