在spark sql中将空值替换为无值


0

我正在将一个csv文件从具有空值的 DataFrame 写入datalake。Spark sql显式地将空值设为空。我想用没有值或没有其他字符串替换这些空值。

当我从databricks中编写csv文件时,它看起来是这样的

ColA,ColB,ColC 
null,ABC,123     
ffgg,DEF,345    
null,XYZ,789

我尝试用“”替换空值填充.na,但当我这样做时,文件会这样写

ColA,ColB,ColC    
'',ABC,123     
ffgg,DEF,345    
'',XYZ,789

我希望我的csv文件看起来像这样。如何从spark sql实现这一点。我在用数据块。在这方面的任何帮助都是非常感谢的。

ColA,ColB,ColC    
,ABC,123     
ffg,DEF,345    
,XYZ,789

谢谢!

1 答案


0

我想我们应该用.saveAsTextFile来代替csv。

例子:

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

如果数据中的第一个字段不为空,则可以使用csv选项:

 df.write.option("nullValue", null).mode("overwrite").csv("<path>")

我来回答

写文章

提问题

面试题