【发布时间】:2020-06-10 14:23:58
【问题描述】:
初始数据在 Dataset
result.coalesce(1).write()
.option("delimiter", "|")
.option("header", "true")
.option("nullValue", "")
.option("quoteAll", "false")
.csv(Location);
预期输出:
"London"||"UK"
"Delhi"|"India"
"Moscow"|"Russia"
电流输出:
London||UK
Delhi|India
Moscow|Russia
如果我将“quoteAll”更改为“true”,我得到的输出是:
"London"|""|"UK"
"Delhi"|"India"
"Moscow"|"Russia"
Spark 版本是 2.3,java 版本是 java 8
【问题讨论】:
-
通常,不包含管道或引号的值不需要引号。这就是 CSV 通常的工作方式。您为什么希望引用这些值?
-
"quoteAll" to "true"输出是正确的。London||UK,||之间是一个单元格。所以你应该用""标记它,如果你想使用quote(成为一个有效的csv)。结果"London"|""|"UK" -
@RealSkeptic 以前的代码版本在 Spark 1.6 中,它就是这样工作的。现在,当升级到 2.3 时,它会为所有内容或任何内容都提供引号。但是业务用户希望它采用以前的格式,并且不希望进行任何更改。我想检查手动将引号添加到所有非空值的可能性,然后将“quoteAll”设置为“false”
-
@KunLun 我不希望空单元格用引号引起来。我希望没有引号的空单元格和带有值的单元格在引号中。
-
这篇文章有你要找的一切:stackoverflow.com/questions/36248206/…
标签: java csv apache-spark java-8 apache-spark-2.3