首页 > 解决方案 > Spark数据框未正确将双引号写入csv文件

问题描述

我正在读取一个由管道(|)分隔的文件。在将数据读取和写入另一个文件时,有双引号的字段会产生问题。输入文件如下所示。

123|"ABC"|hello
124|"AB|hello all
125|A"B"|hellll

代码如下。

val myDf = session.sqlContext.read.format("csv")
      .option("charset", "UTF8")
      .option("inferSchema", "true")
      .option("quote","\u0000")
      .schema(mySchema)
      .option("delimiter", "|")
      .option("nullValue", "")
      .option("treatEmptyValuesAsNulls", "true")
      .load("path to file")

当我做 myDf.show() 在控制台中正确显示输出。但是当我将相同的数据框写入 CSV 文件时,所有双引号都被替换为\".

myDf.repartition(1).write
      .format("com.databricks.spark.csv")
      .option("delimiter", "|")
      .save("Path to save file")

csv 文件中的输出:

123|"\"ABC\""|hello
124|"\"AB"|hello all
125|"A\"B\""|hellll

为什么会发生这种情况,有没有办法得到下面预期的 csv。

123|"ABC"|hello
124|"AB|hello all
125|A"B"|hellll

标签: scalacsvapache-sparkdataframe

解决方案


可以通过禁用转义和引用来完成

myDf.repartition(1).write
      .format("com.databricks.spark.csv")
      .option("escape", "")
      .option("quote", "")
      .option("delimiter", "|")
      .save("Path to save file")

推荐阅读