【问题标题】:Handling multi line data with double quote in Spark-2.2.0 while reading csv在读取 csv 时在 Spark-2.2.0 中使用双引号处理多行数据
【发布时间】:2018-05-25 07:14:42
【问题描述】:

尝试将 CSV 数据读入 Spark-2.2.0 中的数据帧。包含数据的单元格具有多行文本,第一行双引号中的单词很少。下面是使用的代码。尝试了很多选项,但都没有真正奏效。

df = (sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema","true")
.option("multiLine","true")
.option("quoteMode","ALL")
.option("mode","PERMISSIVE")
.option("ignoreLeadingWhiteSpace","true")
.option("ignoreTrailingWhiteSpace","true")
.option("parserLib","UNIVOCITY")
.load("C:/Desktop/testing.csv"))

这是我们试图从文件中读取的数据。第一个单元格包含三行数据。

输入数据:

+----------------------------------------+------------------------+
|                                    text|                    time|
+----------------------------------------+------------------------+
|#Word #This "are acting though."        | 08-11-2016  05:47:00   |
|This is the                             |                        |
|Not so.                                 |                        |
+----------------------------------------+------------------------+
|I'm not sure if I have any left         | 08-11-2016  05:48:00   |
+----------------------------------------+------------------------+
|bob day is an honest  person            | 08-11-2016  05:49:00   |
|"a loss to the senate"                  |                        |
+----------------------------------------+------------------------+

作业运行没有错误,但读取的数据不正确。它以以下方式读取。

输出:

+----------------------------------------+------------------------+
|                                    text|                    time|
+----------------------------------------+------------------------+
|\#Word #This \"\"are acting though.\"\""|                        |
+----------------------------------------+------------------------+
|This is the                             |                        |
|Not so.\",08-11-2016  05:47:00          |                        |
+----------------------------------------+------------------------+
|I'm not sure if I have any left         | 08-11-2016  05:48:00   |
+----------------------------------------+------------------------+
|\bob day is an honest  person           | 08-11-2016  05:49:00   |
|\"\"a loss to the senate\"\"\""         |                        |
+----------------------------------------+------------------------+

对此感到震惊,因为该行在双引号后分成两行,并且还看到几个“\”。时间戳也移动了。

【问题讨论】:

  • 能否给个样本数据。我无法重现相同的问题。我尝试在单元格中插入新行,当多行为真时它对我有用。据我了解,'\' 可能是这里的问题。
  • @mayankagrawal 是的,额外的“\”正在添加到输出数据中。输入只有双引号。
  • 我认为将参数 'escape' 设置为与默认值 '\' 不同的值可能会起作用
  • 我遇到了类似的问题并找到了解决方案stackoverflow.com/questions/53818894/…

标签: apache-spark pyspark pyspark-sql


【解决方案1】:

根据这个link,您应该将wholeFile 选项设置为True 以在escape 指定的字符之间转义换行符。但是,您似乎没有转义包含换行符的文本,因此这可能不起作用。您或许应该重新格式化源代码,以便引用包含换行符的文本。

【讨论】:

  • 感谢@ags29 添加 ("escape",'\n') 和 ("wholeFile","True") 在一定程度上解决了这个问题。第三个记录现在正常来了。像第一个这样的记录问题仍然存在。
猜你喜欢
  • 2020-07-12
  • 1970-01-01
  • 2019-06-28
  • 2020-12-13
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多