Boc*_*iek 2 python apache-spark pyspark
我在使用 pySpark 读取 csv 文件时遇到问题。我有三列,其中包含 url 地址、标题(字符串)和完整的 html 文件。最后一个字段用引号 "..." 括起来,其中引用的任何内容都有双引号,例如 "test" -> ""test""(它还包含换行符)。我可以使用 Pandas 读取这个文件,一切都很好,但是当我使用 pySpark 时,它不会破坏 coma (,) 分隔符上的文本(我不确定,但可能是 html 中的换行符)。这是一个示例代码:
df = spark.read \
.option("header", "true") \
.csv('path_to_file')
print( df.limit(2).collect() )
Run Code Online (Sandbox Code Playgroud)
这是一个不起作用的示例文本:
url,body,title
https://test.com,"<!doctype html >
</html>",title_title
Run Code Online (Sandbox Code Playgroud)
顺便说一句,vim 显示^M在html >. 也许这会导致问题?
更新 经过一些尝试,我得出结论,pyspark 将引号内的换行符解释为另一行的开头。但只有当我在文件中按“Enter”作为跳转到新行时才会这样做。如果明确写入\n,则它有效。这件作品:
url,body,title
https://test.com,"<!doctype html >\n</html>",title_title
Run Code Online (Sandbox Code Playgroud)
Pandas 适用于两个版本!
这似乎有效:
df = (spark.read
.option("multiline", "true")
.option("quote", '"')
.option("header", "true")
.option("escape", "\\")
.option("escape", '"')
.csv('path_to_file')
)
Run Code Online (Sandbox Code Playgroud)
用scala_2.11.0和测试spark_2.3.4_hadoop2.7