rai*_*ros 5 csv apache-spark spark-csv databricks
希望每个人都做得很好。
在查看问题的Spark csv 数据源选项时,我对可用的各种报价相关选项之间的差异感到非常困惑。
使用链接问题中提到的示例来理解差异,但仍然有点困惑。感谢您的所有帮助。
让我们看几个例子。
val df = Seq(
(1, "aaa"),
(2, "b,c"),
(3, "d$e"),
(4, "f%g")
).toDF("x", "y")
df.show
+---+---+
| x| y|
+---+---+
| 1|aaa|
| 2|b,c|
| 3|d$e|
| 4|f%g|
+---+---+
Run Code Online (Sandbox Code Playgroud)
每当值中的逗号与字段分隔符(例如 )无法区分时,2,b,cSpark 就可以引用此类值。默认情况下它是双引号(如2,"b,c"),但您可以使用quote选项自定义它。
df.coalesce(1).write.mode("overwrite")
.option("quote", "$")
.csv("x")
1,aaa
2,$b,c$
3,$d\$e$
4,f%g
Run Code Online (Sandbox Code Playgroud)
我们在这里使用美元符号。不仅b,c被引用,而且由于d$e包含美元,它也被引用,并且美元本身被转义。
我不知道您为什么要这样做,但您可以要求 Spark 不要使用 escapeQuotes选项转义包含引号字符的字段。
df.coalesce(1).write.mode("overwrite")
.option("quote", "$")
.option("escapeQuotes", false)
.csv("x")
1,aaa
2,$b,c$
3,d$e
4,f%g
Run Code Online (Sandbox Code Playgroud)
在这里,d$e仍然没有被引用。
您还可以使用quoteAll强制它引用每个字段。
df.coalesce(1).write.mode("overwrite")
.option("quote", "$")
.option("quoteAll", true)
.csv("x1")
$1$,$aaa$
$2$,$b,c$
$3$,$d\$e$
$4$,$f%g$
Run Code Online (Sandbox Code Playgroud)
请注意,quoteAll = true使得escapeQuotes无关紧要。
如果您不喜欢默认的反斜杠,可以使用escape自定义quote 内引号字符的转义字符。
df.coalesce(1).write.mode("overwrite")
.option("quote", "$")
.option("escape", "%")
.csv("x1")
1,aaa
2,$b,c$
3,$d%$e$
4,$f%g$
Run Code Online (Sandbox Code Playgroud)
最后,请注意 中有一个独立的转义字符f%g,因此如果您想转义它,请使用charToEscapeQuoteEscaping。
df.coalesce(1).write.mode("overwrite")
.option("quote", "$")
.option("escape", "%")
.option("quoteAll", true)
.option("charToEscapeQuoteEscaping", "^")
.csv("x1")
$1$,$aaa$
$2$,$b,c$
$3$,$d%$e$
$4$,$f^%g$
Run Code Online (Sandbox Code Playgroud)
不,你不能再深入并逃脱^……
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |