我有一个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读取这个文件。
通过这个教程,我可以看到通过sqlContext.read.json读取json是可能的。
val vfile = sqlContext.read.json("path/to/file/nodes.json")但是,这会导致corrupt_record错误:
vfile: org.apache.spark.sql.DataFrame = [_corrupt_record: string]有人能解释一下这个错误吗?我可以与其他应用程序一起读取和使用该文件,并且我确信它没有损坏和健全的json。
发布于 2016-08-11 11:48:07
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的一个替代方案。
发布于 2018-09-23 00:30:10
由于Spark期望"JSON行格式“不是典型的JSON格式,因此我们可以通过指定以下内容来告诉spark读取典型的JSON:
val df = spark.read.option("multiline", "true").json("<file>")发布于 2017-10-14 14:44:25
要将多行JSON读取为DataFrame:
val spark = SparkSession.builder().getOrCreate()
val df = spark.read.json(spark.sparkContext.wholeTextFiles("file.json").values)不建议从wholeTextFiles文档中以这种方式读取大型文件。
小文件是首选,大文件也是允许的,但可能会导致不好的性能。
https://stackoverflow.com/questions/38895057
复制相似问题