Java 使用SPARK写入CSV时从字符串类型数据中删除双引号
我们将Java与Spark一起使用。当前的需求是将一个数据集写入Spark,空间作为Delimeter。以下是我尝试过的代码:Java 使用SPARK写入CSV时从字符串类型数据中删除双引号,java,csv,apache-spark,Java,Csv,Apache Spark,我们将Java与Spark一起使用。当前的需求是将一个数据集写入Spark,空间作为Delimeter。以下是我尝试过的代码: fooDataSetObject.coalesce(1).map((MapFunction<FooDataSet, FooDataSet>) fooDataSet -> FileOperations.call(fooDataSet,broadcastedProperty),encoder).select("column","cons_zero",
fooDataSetObject.coalesce(1).map((MapFunction<FooDataSet, FooDataSet>) fooDataSet ->
FileOperations.call(fooDataSet,broadcastedProperty),encoder).select("column","cons_zero",
"columnA","columnB","columnC","columnD",
"constants_value")
.write()
.format("com.databricks.spark.csv")
.option("inferSchema", true)
.option(Constants.DELIMITER, " ")
.option(Constants.IGNORE_LEADING_WHITESPACE, ApplicationConstants.FALSE)
.option(Constants.IGNORE_TRAILING_WHITESPACE, ApplicationConstants.FALSE)
.option("quote", " ")
.mode(SaveMode.Overwrite)
.save(path);
输出:
93115212345678 0 "GB 29 NWBK 12345 78978911 " 00123400 "12345 " 99 "60214057695857Tickets Cash-back 0"
请使用此代码
.option("quote", "\"")
.option("escape", "\"")
有关更多信息,请参阅。浏览了以下文档 quote default:设置用于转义带引号的值的单个字符,其中分隔符可以是值的一部分。如果要关闭引号,则需要将其设置为空字符串而不是null。此行为与com.databricks.spark.csv不同。 转义默认值:设置用于转义已引用值内的引号的单个字符。 现在,即使我将代码改为使用SEP而不是DELIMETER,也会出现同样的问题,因为Spark添加了表示空字符的\u0000。 尝试输入一个空字符串,结果相同
因此,我转而使用Spark文本格式,并在后台使用Java格式化程序来创建逗号分隔行。相同的结果:93115212345678 0 GB 29 NWBK 12345 78978911 00123400 12345 99 602140576958570仍然存在引号。您能提供一行的示例数据吗?
.option("quote", "\"")
.option("escape", "\"")