Spark读取part文件时空字符串被转为null,如何保留为空字符串?
解决方案
出现该差异的核心原因是Databricks CSV数据源的默认空值映射规则,在读取Spark输出的part格式CSV文件时,会默认触发空字符串转null的逻辑,你只需要在读取配置中新增两个显式配置项即可:
修改后的代码如下:
var inputDFRdd = spark.emptyDataFrame.rdd inputDFRdd = spark.read.format("com.databricks.spark.csv") .option("mode", "FAILFAST") .option("delimiter", ",") .option("header", "false") .option("inferSchema", "false") .option("escape", "\"") // 新增以下两个配置 .option("treatEmptyValuesAsNulls", "false") .option("emptyValue", "") .load().rdd.zipWithIndex() .map(line => Row.fromSeq(Seq(line._2 + 1) ++ line._1.toSeq))
配置说明
treatEmptyValuesAsNulls:设为false后会禁止数据源自动将空字段识别为null值emptyValue:显式指定空字段的解析结果为空字符串,覆盖读取part文件时的默认映射逻辑
如果你业务中有自定义的null占位符(比如\N),可以额外添加.option("nullValue", "\\N")配置,让数据源仅将匹配该值的字段解析为null,其他空字段仍保持为空字符串。
内容的提问来源于stack exchange,提问作者Sang
相关产品推荐
相关产品推荐

