Apache spark DataFrameWriter.csv()修剪数据集中的所有字段<;世界其他地区>;写入CSV文件时

Apache spark DataFrameWriter.csv()修剪数据集中的所有字段<;世界其他地区>;写入CSV文件时,apache-spark,Apache Spark,当使用spark 2.1中的DataFrameWritercsv方法将Dataset写入csv文件时,默认情况下会修剪所有字符串字段。 例如,对于列: " 0"," Shop "," CA" 它是这样写的: "0","Shop","CA" 在csv文件中 我使用了以下选项: dataFrame.write() .format("csv") .option("header", "false") .option("dateFormat", "yyyy-MM-dd") .op

当使用spark 2.1中的
DataFrameWriter
csv方法将
Dataset
写入csv文件时,默认情况下会修剪所有字符串字段。 例如,对于列:

"    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);
但它仍然在修整田地。 我希望田地不修剪。
有人能帮我吗?

是否应该在末尾调用另一个方法(如
text(path)
save(path)


其他选项是否有效?一个猜测是is与订购有关。

不幸的是,您必须RTFSC=“阅读f..源代码”

我在branch 2.1中找到了
DataFrameWriter
的源代码:

评论说

您可以为写入CSV设置以下特定于CSV的选项 文件
sep
..
quote
..
escape
..
escapeQuotes
。。。
quoteAll
..
标题
..
null值
..
压缩
。。。
dateFormat
timestampFormat


这就是为什么忽略
ignoreLeadingWhiteSpace
ignoreTrailingWhiteSpace
的设置——它们仅在通过读取CSV文件时适用


此时,您必须尝试使用引号
[编辑]您的示例已经到处显示引号,尽管您没有强制执行默认为false的
quoteAll
。确实令人费解


我的建议是:通过在值周围添加显式引号字符来转换要保持未修剪的列,然后将结果保存为CSV而不自动引号。

text(path)仅适用于string类型的单个列,我有多个列。我正在使用save(path)仅:我忘了在问题中添加那个部分。我的代码部分是:dataFrame.write().format(“csv”)。option(“header”,“false”)。option(“dateFormat”,“yyyyy-MM-dd”)。option(“sep”,“sep”,“false”)。option(“ignoreLeadingWhiteSpace”,“false”)。option(“escape”,“false”)。option(“escape”,“escape”,“\”)。option(“quoteALL,“true”)。保存(路径)“对不起,我忘了在代码中添加quoteALL。我已经在使用它,并且我在所有字段中都需要它。我已经编辑了问题中的代码。在spark 1.6中,相同的代码没有修剪字段,这是在这里修剪。有没有办法避免修剪每个字符串字段?我不知道。修剪是仅使用CSV还是同时使用JSON(可通过文本编辑器读取)或拼花地板(需要另一个Spark命令才能读回)?