apache-spark - 在读取 csv 时在 Spark-2.2.0 中使用双引号处理多行数据

标签 apache-spark pyspark pyspark-sql

尝试将 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\"\"\""         |                        |
+----------------------------------------+------------------------+

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

最佳答案

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

关于apache-spark - 在读取 csv 时在 Spark-2.2.0 中使用双引号处理多行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47758446/

相关文章:

postgresql - 如何使用 PySpark 将 JSON 列类型写入 Postgres?

python - 将行列表保存到 pyspark 中的 Hive 表

python - Pyspark 中时间戳的滚动平均值和总和

python - 无法 pickle _thread.rlock 对象 Pyspark 向 elasticsearch 发送请求

python - Pyspark,在字符串中间添加一个字符

scala - java.lang.RuntimeException:java.lang.String不是bigint或int模式的有效外部类型

apache-spark - PySpark-获取组中每一行的行号

scala - 从 avsc 文件自动创建 StructType

apache-spark - SPARK 中的用户定义函数 (UDF) 是否以分布式方式工作?

apache-spark - 有没有办法收集 pyspark 中嵌套模式中所有字段的名称