Spark CSV读/写空字段

时间:2017-09-26 14:44:13

标签: csv apache-spark dataframe

我想将Dataframe的空字段写为空,但它总是写为NULL。我想将NULLS写为?并将空为空/空。从csv读取时也一样。

val df = sqlContext.createDataFrame(Seq(
    (0, "a"),
    (1, "b"),
    (2, "c"),
    (3, ""),
    (4, null)
))    

scala> df.show

|  0|   a|
|  1|   b|
|  2|   c|
|  3|    |
|  4|null|   
+---+----+

df.write.mode(SaveMode.Overwrite).format("com.databricks.spark.csv").option("nullValue","?").save("/xxxxx/test_out")

written output :

0,a
1,b
2,c
3,?
4,?
.option("treatEmptyValuesAsNulls" , "false")

此选项不起作用。

我需要将空写为空

0,a
1,b
2,c
3,
4,?

1 个答案:

答案 0 :(得分:0)

尝试使用sql -

我正在使用spark 2.2。

val ds= sqlContext.sql("select `_1`, case when `_2` is not null then `_2` else case when `_2` is null then '?' else case when `_2` = '' then '' end end end as val "+
      "from global_temp.test");

    ds.write.csv("<output path>");