在 spark sql 中用无值替换 Null 值
Posted
技术标签:
【中文标题】在 spark sql 中用无值替换 Null 值【英文标题】:Replace Null values with no value in spark sql 【发布时间】:2020-03-12 20:36:58 【问题描述】:我正在从具有空值的数据帧将 csv 文件写入数据湖。 Spark sql 明确地将值设置为 Null
用于空值。我想用没有值或没有其他字符串替换这些空值。
当我从 databricks 写入 csv 文件时,它看起来像这样
ColA,ColB,ColC
null,ABC,123
ffgg,DEF,345
null,XYZ,789
我尝试使用fill.na
将空值替换为''
,但是当我这样做时,文件会这样写
ColA,ColB,ColC
'',ABC,123
ffgg,DEF,345
'',XYZ,789
我希望我的 csv 文件看起来像这样。我如何从 spark sql 中实现这一点。我正在使用数据块。非常感谢这方面的任何帮助。
ColA,ColB,ColC
,ABC,123
ffg,DEF,345
,XYZ,789
谢谢!
【问题讨论】:
这能回答你的问题吗? Writing CSV file using Spark and scala - empty quotes instead of Null valuesoption("nullValue", null)
如果您的 first field
为空,则将无法工作仍保留为 ""
【参考方案1】:
我认为我们需要在这种情况下使用 .saveAsTextFile
而不是 csv
。
Example:
df.show()
//+----+----+----+
//|col1|col2|col3|
//+----+----+----+
//|null| ABC| 123|
//| dd| ABC| 123|
//+----+----+----+
//extract header from dataframe
val header=spark.sparkContext.parallelize(Seq(df.columns.mkString(",")))
//union header with data and replace [|]|null then save
header.union(df.rdd.map(x => x.toString)).map(x => x.replaceAll("[\\[|\\]|null]","")).coalesce(1).saveAsTextFile("<path>")
//content of file
//co1,co2,co3
//,ABC,123
//dd,ABC,123
如果您的数据中的 First field
是 not null
,那么您可以使用 csv
选项:
df.write.option("nullValue", null).mode("overwrite").csv("<path>")
【讨论】:
非常感谢。这帮助很大以上是关于在 spark sql 中用无值替换 Null 值的主要内容,如果未能解决你的问题,请参考以下文章