Замените нулевые значения без значения в искре sql - PullRequest
0 голосов
/ 12 марта 2020

Я записываю CSV-файл в набор данных из фрейма данных, который имеет нулевые значения. Spark sql явно выставляет значение как Null для нулевых значений. Я хочу заменить эти нулевые значения никакими значениями или другими строками.

Когда я пишу 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-файл выглядел следующим образом. Как мне добиться этого от свечи sql. Я использую блоки данных. Любая помощь в этом отношении высоко ценится.

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

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2020

Я думаю, нам нужно использовать .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>")
...