2017-08-24 72 views
3

我試圖創建存儲在表中值的CSV:火花df.write報價的所有字段不爲空值

| 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:對於空值

NO雙引號
"col1","col2","col3" 
"one",,"one" 
"two","two","two" 

任何幫助表示讚賞知道如果數據幀寫入器有選項來做到這一點。

回答

2

你可以在一個UDF方法,並應用在列(上面的重新劃分datafrmae使用withColumn),其中雙引號空字符串的一種可能是有見下面的示例代碼

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

Stringreplace做這項工作的方法。

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

會產生'x',,z

+0

謝謝您的幫助。我很感激。 我正在尋找一種方式,其中數據幀編寫器有選項不添加雙引號空值,因爲我不想操縱csv。 – dreddy

+1

對不起AFAIK我不知道這樣的選項內置。如果你沒事的話,上面的方法應該工作 –

+1

,請接受爲所有者。它也會是其他用戶的指針。謝謝! –