我有一个json文件,nodes看起来像这样:
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。
scala
spark-shell
从这个教程中,我可以看到,它可以读取json通过sqlContext.read.json
sqlContext.read.json
val vfile = sqlContext.read.json("path/to/file/nodes.json")
但是,这会导致corrupt_record错误:
corrupt_record
vfile: org.apache.spark.sql.DataFrame = [_corrupt_record: string]
任何人都可以阐明这个错误吗?我可以与其他应用程序一起阅读和使用该文件,并且我相信它不会损坏且不会发出声音json。
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的替代方法。