在spark 2.1中使用Dataset<Row>
csv方法将DataFrameWriter
写入csv文件时,默认情况下会修剪所有String字段。
例如,对于列:
" 0"," Shop "," CA"
写作:
"0","Shop","CA"
在csv文件中。
我使用了以下选项:
dataFrame.write()
.format("csv")
.option("header", "false")
.option("dateFormat", "yyyy-MM-dd")
.option("sep", ",")
.option("ignoreLeadingWhiteSpace", "false")
.option("ignoreTrailingWhiteSpace","false")
.option("escape", "\"")
.option("quoteALL","true")
.save(path);
但它仍在修剪田地。 我希望字段未修剪。 任何人都可以帮我吗?
答案 0 :(得分:2)
不幸的是,你必须RTFSC =“阅读f ... 源代码”。
我在分支2.1中找到了DataFrameWriter
的来源:
https://github.com/apache/spark/blob/branch-2.1/sql/core/src/main/scala/org/apache/spark/sql/DataFrameWriter.scala
评论说明......
您可以为书写 CSV设置以下特定于CSV的选项 文件
sep
...quote
...escape
...escapeQuotes
...quoteAll
...header
...nullValue
...compression
...dateFormat
...timestampFormat
这就是为什么ignoreLeadingWhiteSpace
和ignoreTrailingWhiteSpace
的设置被忽略的原因 - 只有当读取 CSV文件时,才会通过DataFrameReader
应用这些设置。
quoteAll
默认情况下为false。真是令人费解。
我的建议:通过在值周围添加显式引号字符来转换要保持未修剪的列,然后将结果保存为CSV 而不自动引用。
答案 1 :(得分:0)
最后是否应该调用另一种方法(如text(path)
或save(path)
?
其他选项是否有效?一个疯狂的猜测是与订购有关。