Apache Spark 将 Dataframe 导出为CSV时处理双引号

noj0wjuj  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(205)

我有一个值中包含双引号(“)和逗号的 Dataframe 。我尝试将 Dataframe 导出到csv中,但不幸的是,双引号在导出的csv中显示不正确。
我设法通过将“quoteAll”设置为true来处理所有其他特殊字符。
在csv中,如果你用两个双引号替换单双引号,它会工作得很好。但是当我用下面的代码导出到csv时,它会在导出的csv中替换“with“。

%scala

val df = Seq((1, "A,B,C,\"DEF\""), (2, "DEF")).toDF("ID", "Val")

val updatedDf = df.columns.foldLeft(df)((acc, colname) => acc.withColumn(colname,regexp_replace(acc(s"`$colname`"), "\"", "\"\"")))

deltaDS.coalesce(1).write
.option("header", true)
.option("encoding", "utf-8")
.option("quoteAll", true)
.mode("Overwrite").csv("[Location to store csv]")

输出:

预期输出:

我该怎么办?

jvlzgdj9

jvlzgdj91#

您尚未提供所需的确切纯文本csv,因此很难猜测。您是否正在查找此文件?

val df = Seq((1, "A,B,C,\"DEF\""), (2, "DEF")).toDF("ID", "Val")

df.coalesce(1).write
.option("header", true)
.option("encoding", "utf-8")
.option("quoteAll", true)
.option("escape", "\"")  // escapes quotes inside quote using "
.mode("Overwrite").csv("xxx")

生成的csv:

"ID","Val"
"1","A,B,C,""DEF"""
"2","DEF"
mm9b1k5b

mm9b1k5b2#

根据输入,以下似乎是 Dataframe 输出。

文件名:

已更新数据框:

由于quoteAll被设置为true,它将按照spark文档中提到的那样工作。

当转换为CSV时,输出如下。

文件格式.csv:

"ID","Val"
"1","A,B,C,\"DEF\""
"2","DEF"

已更新的DF.csv文件:

"ID","Val"
"1","A,B,C,\"\"DEF\"\""
"2","DEF"

处理转义字符的一个建议是使用原始 Dataframe 并将转义字符设为空。但请注意它可能对其他特殊字符产生的影响。
第一次
希望这是预期的输出...

相关问题