首页 > 解决方案 > Spark - 处理 CSV 文件中的空白值

问题描述

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

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:表示空值的字符串,任何匹配该字符串的字段都会在DataFrame中设置为空值。

但由于我在那里没有任何价值,我似乎无法以这种方式控制它。

没有测试我读入的每个文件的每个字段,有没有办法控制火花对这些空白的作用?例如,将其替换为“N/A”。

如果相关,我们使用的是 Spark 2.1。

标签: apache-sparkspark-csv

解决方案


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

a|b|N/A|d

你设置

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

你会再次结束

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

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


推荐阅读