无法在写入数据帧时附加“引号”

时间:2017-04-14 06:14:02

标签: apache-spark spark-dataframe

我正在尝试将数据帧保存为spark中的.csv。要求所有字段都以“引号”为界。目前,该文件未包含在“引号”中。

我正在使用Spark 2.1.0

代码:

DataOutputResult.write.format("com.databricks.spark.csv").
option("header", true).
option("inferSchema", false).
option("quoteMode", "ALL").
mode("overwrite").
save(Dataoutputfolder)

输出格式(实际):

Name, Id,Age,Gender

XXX,1,23,Male

输出格式(必填):

"Name", "Id" ," Age" ,"Gender"

"XXX","1","23","Male"

到目前为止我尝试过的选项:

QuoteMode,引用它作为文件的选项,但没有成功。

2 个答案:

答案 0 :(得分:0)

("quote", "all"),将quoteMode替换为quote

或直接在concat列上使用concat_wsdf进行游戏,并在不quote - mode的情况下保存

import org.apache.spark.sql.functions.{concat, lit}

val newDF = df.select(concat($"Name", lit("""), $"Age"))

或创建自己的udf函数来添加所需的行为,请在Concatenate columns in apache spark dataframe中找到更多示例

答案 1 :(得分:0)

无法在以上答案中添加评论,因此请发布答案。 在Spark 2.3.1中,使用quoteAll

df1.write.format("csv")
.option("header", true)
.option("quoteAll","true")
.save(Dataoutputfolder)

此外,要添加到@Karol Sudol的评论中(最好的回答),.option("quote","\u0000")仅在使用Pyspark和Python 3(默认编码为'utf-8')的情况下有效。少数人报告说该选项不起作用,因为他们必须将Pyspark与默认编码为'ascii'的Python 2配合使用。因此,错误"java.lang.RuntimeException: quote cannot be more than one character"