spark df.write引用所有字段但不引用空值

时间:2017-08-24 19:22:17

标签: csv apache-spark spark-dataframe

我正在尝试根据存储在表中的值创建一个csv:

 | col1   | col2   | col3  |
 | "one"  | null   | "one" |
 | "two"  | "two"  | "two" |

hive > select * from table where col2 is null;
 one   null    one 

我使用以下代码获取csv:

df.repartition(1)
  .write.option("header",true)
  .option("delimiter", ",")
  .option("quoteAll", true)
  .option("nullValue", "")
  .csv(S3Destination)

Csv我得到:

"col1","col2","col3"
"one","","one"
"two","two","two"

预期的Csv:没有双值的空值

"col1","col2","col3"
"one",,"one"
"two","two","two"

任何帮助都要知道数据框编写者是否有选项来执行此操作。

1 个答案:

答案 0 :(得分:2)

您可以使用udf方法并应用于列(在上面重新分区的datafrmae上使用withColumn),其中双引号空字符串的可能性如下所示

 sqlContext.udf().register("convertToEmptyWithOutQuotes",(String abc) -> (abc.trim().length() > 0 ? abc : abc.replace("\"", " ")),DataTypes.StringType);
  

String使用replace方法完成工作。

val a =  Array("'x'","","z")
println(a.mkString(",").replace("\"", " "))

将生成'x',,z