Spark DataFrame写入CSV时如何将空字符串替换为null?
解决方案
你遇到的问题是Spark写入CSV时,null值被输出为空字符串,需要调整nullValue和emptyValue的配置,同时移除无效的读取选项:
原代码问题分析
treatEmptyValuesAsNulls是读取CSV时的配置,用于将文件中的空字符串解析为DataFrame的null值,写入时该选项无效,可直接移除。- 你将
nullValue和emptyValue设为null,这会让Spark使用默认的空字符串表示null值,而非你期望的"null"字符串。
修正后的代码
dataFrame .coalesce(16) .write .format("csv") .option("delimiter", "|") .option("nullValue", "null") // 指定null值输出为"null"字符串 .option("emptyValue", "null") // 若希望空字符串也输出为"null",保留此配置;若仅处理null,可根据需求调整 .mode(SaveMode.Overwrite) .save(path)
关键配置说明
nullValue:定义DataFrame中的null值在CSV文件中对应的字符串,设置为"null"后,原null值会被输出为null。emptyValue:定义DataFrame中的空字符串在CSV中对应的字符串,如果你的数据中存在空字符串且也需要输出为null,保留此配置;若仅需处理null值,可根据实际情况决定是否保留。
执行修正后的代码后,输出会符合你的期望:
101|abc|null|555
102|null|xyz|743
内容的提问来源于stack exchange,提问作者Ikshwaku Baruah
相关产品推荐
相关产品推荐

