开发者社区> 问答> 正文

Spark TSV文件和不正确的column spit

我有很多行的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以正确理解和拆分此行?正如我之前提到的,此文件中的许多其他行都正确地拆分为正确的列。

展开
收起
社区小助手 2018-12-06 15:45:00 2870 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我在这里找到了答案:https://github.com/databricks/spark-csv/issues/89

    使用反斜杠字符()关闭双引号字符(“)的默认转义的方法 - 即为了避免完全转义所有字符,你必须添加一个.option()方法调用,后面只有正确的参数。 write()方法调用.select()方法调用的目的是改变csv()方法在发出内容时“找到”“quote”字符实例的方式。为此,你必须更改默认值“引用”实际上意味着什么;即将从双引号字符(“)中寻找的字符更改为Unicode” u0000“字符(基本上提供Unicode NUL字符,假设它不会出现在文档中)。

    以下可以解决问题:

    .option("quote", "u0000")

    2019-07-17 23:18:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载