【问题标题】:Spark dataframe not writing Double quotes into csv file properlySpark数据框未正确将双引号写入csv文件
【发布时间】:2019-10-07 10:52:22
【问题描述】:

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

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

【问题讨论】:

  • 有一个稍微不同的问题 - 当使用 Coalesce 在 databrics 中创建 CSV 时 - 我的输出在每行的开头/结尾都有双引号。我已经有了 .option("quote", "") 。当其他人下载相同的代码时,他们不会得到这些双引号。试图找到另一段代码 - 或要更改的设置。

标签: scala csv apache-spark dataframe


【解决方案1】:

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

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

【讨论】:

  • 能否请您解释一下禁用的方式和内容
  • @potterpod 基本上转义字符和引号字符都设置为空字符串.option("escape", "").option("quote", "")
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多