我有很多行的TSV文件。很多行都运行正常,但我有使用以下行的问题:
tt7841930 tvEpisode "Stop and Hear the Cicadas/Cold-Blooded "Stop and Hear the Cicadas/Cold-Blooded 0 2018 N 24 Animation,Family
我使用Spark和Scala将文件加载到DataFrame中:
val titleBasicsDf = spark.read
.format("org.apache.spark.csv")
.option("header", true)
.option("inferSchema", true)
.option("delimiter", " ")
.csv("title.basics.tsv.gz")
结果我收到:
tconst | titleType | primaryTitle | originalTitle | isAdult | startYear | endYear | runtimeMinutes | genres | averageRating | numVotes | parentTconst | seasonNumber | episodeNumber |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
tt7841930 | tvEpisode | "Stop and Hear the Cicadas/Cold-Blooded "Stop and Hear the Cicadas/Cold-Blooded | 0 | 2018 | N | 24 | Animation,Family | null | null | null | tt4947580 | 6 | 2 |
如您所见,该行中的以下数据:
"Stop and Hear the Cicadas/Cold-Blooded "Stop and Hear the Cicadas/Cold-Blooded
没有正确地分为两个不同的值primaryTitle和originalTitle列,并primaryTitle包含它们:
{
"runtimeMinutes":"Animation,Family",
"tconst":"tt7841930",
"seasonNumber":"6",
"titleType":"tvEpisode",
"averageRating":null,
"originalTitle":"0",
"parentTconst":"tt4947580",
"startYear":null,
"endYear":"24",
"numVotes":null,
"episodeNumber":"2",
"primaryTitle":""Stop and Hear the Cicadas/Cold-Bloodedt"Stop and Hear the Cicadas/Cold-Blooded",
"isAdult":2018,
"genres":null
}
我做错了什么以及如何配置Spark以正确理解和拆分此行?正如我之前提到的,此文件中的许多其他行都正确地拆分为正确的列。
我在这里找到了答案:https://github.com/databricks/spark-csv/issues/89
使用反斜杠字符()关闭双引号字符(“)的默认转义的方法 - 即为了避免完全转义所有字符,你必须添加一个.option()方法调用,后面只有正确的参数。 write()方法调用.select()方法调用的目的是改变csv()方法在发出内容时“找到”“quote”字符实例的方式。为此,你必须更改默认值“引用”实际上意味着什么;即将从双引号字符(“)中寻找的字符更改为Unicode” u0000“字符(基本上提供Unicode NUL字符,假设它不会出现在文档中)。
以下可以解决问题:
.option("quote", "u0000")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。