一尘不染

用Apache Spark读取JSON-`corrupt_record`

json

我有一个json文件,nodes看起来像这样:

[{"toid":"osgb4000000031043205","point":[508180.748,195333.973],"index":1}
,{"toid":"osgb4000000031043206","point":[508163.122,195316.627],"index":2}
,{"toid":"osgb4000000031043207","point":[508172.075,195325.719],"index":3}
,{"toid":"osgb4000000031043208","point":[508513,196023],"index":4}]

我可以使用Python读取和操作此记录。

我试图读取该文件中scala通过spark-shell

从这个教程中,我可以看到,它可以读取json通过sqlContext.read.json

val vfile = sqlContext.read.json("path/to/file/nodes.json")

但是,这会导致corrupt_record错误:

vfile: org.apache.spark.sql.DataFrame = [_corrupt_record: string]

任何人都可以阐明这个错误吗?我可以与其他应用程序一起阅读和使用该文件,并且我相信它不会损坏且不会发出声音json


阅读 356

收藏
2020-07-27

共1个答案

一尘不染

Spark无法将JSON数组读取到顶级记录,因此您必须通过:

{"toid":"osgb4000000031043205","point":[508180.748,195333.973],"index":1} 
{"toid":"osgb4000000031043206","point":[508163.122,195316.627],"index":2} 
{"toid":"osgb4000000031043207","point":[508172.075,195325.719],"index":3} 
{"toid":"osgb4000000031043208","point":[508513,196023],"index":4}

本教程中所述,您指的是:

首先加载一个JSON文件,其中 每一行 都是一个JSON对象

推理很简单。Spark希望您传递带有很多JSON实体(每行实体)的文件,以便它可以分发它们的处理(按每个实体粗略地说)。

为了进一步阐明它,这是官方文档的报价单

请注意,以json文件形式提供的文件不是典型的JSON文件。每行必须包含一个单独的,自包含的有效JSON对象。因此,常规的多行JSON文件通常会失败。

此格式称为JSONL。基本上,它是CSV的替代方法。

2020-07-27