spark df.write 引用所有字段,但不引用空值
Posted
技术标签:
【中文标题】spark df.write 引用所有字段,但不引用空值【英文标题】:spark df.write quote all fields but not null values 【发布时间】:2017-08-24 19:22:17 【问题描述】:我正在尝试从存储在表中的值创建一个 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:NULL 值没有双引号
"col1","col2","col3"
"one",,"one"
"two","two","two"
如果数据框编写器有选项可以执行此操作,我们将不胜感激。
【问题讨论】:
【参考方案1】:您可以采用 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
【讨论】:
感谢您的帮助。我很感激。我正在寻找一种方法,数据框编写器可以选择不向空值添加双引号,因为我不想操作 csv。 抱歉 AFAIK 我不知道内置的此类选项。上述方法应该有效 如果您还好,请接受为所有者。它也将指向其他用户。谢谢!以上是关于spark df.write 引用所有字段,但不引用空值的主要内容,如果未能解决你的问题,请参考以下文章