python - 用双引号和换行符在pySpark中读取csv文件
问题描述
我在使用 pySpark 读取 csv 文件时遇到问题。我有 url 地址、标题(字符串)和完整的 html 文件的三列。最后一个字段在引号“...”中,其中引用的任何内容都有双引号,例如“test”->“”test””(它也包含换行符)。我可以使用 pandas 读取这个文件,一切都很好,但是当我使用 pySpark 时,它不会破坏逗号 (,) 分隔符上的文本(我不确定,但可能在 html 内的换行符上)。这是一个示例代码:
df = spark.read \
.option("header", "true") \
.csv('path_to_file')
print( df.limit(2).collect() )
这是一个不起作用的示例文本:
url,body,title
https://test.com,"<!doctype html >
</html>",title_title
顺便说一句,vim 显示^M
在html >
. 也许这会引起问题?
更新经过一些尝试,我得出结论,pyspark 将引号内的换行符解释为另一行的开头。但只有当我在文件中按“Enter”作为跳转到新行时才会这样做。如果显式地写\n
,那么它可以工作。这件作品:
url,body,title
https://test.com,"<!doctype html >\n</html>",title_title
熊猫适用于两个版本!
解决方案
这似乎有效:
df = (spark.read
.option("multiline", "true")
.option("quote", '"')
.option("header", "true")
.option("escape", "\\")
.option("escape", '"')
.csv('path_to_file')
)
测试scala_2.11.0
和spark_2.3.4_hadoop2.7
推荐阅读
- reactjs - React 不会在状态更改时重新渲染
- java - Apache POI:迭代 docx.getBodyElements() 时如何获取页码
- python - 将字符串的csv列转换为日期时间
- elasticsearch - 弹性搜索 , And 运算符 , 嵌套字段
- excel - 如果满足两个不同的特征,我需要一个 Excel 公式,它将数据从一张表移动到另一张表
- javascript - .innerHTML 内的图片链接
- javascript - 用 Jest 进行测试。应该抛出的测试失败
- r - seq_len 在 rcpp 中无法识别
- javascript - 当我尝试单击功能时,Chrome 扩展程序出错
- r - 当特定字符串在某个变量中时,如何在另一个变量中赋值。(在 R 中)