使用pyspark将json文件读入RDD(不是数据帧)

使用pyspark将json文件读入RDD(不是数据帧),json,apache-spark,pyspark,Json,Apache Spark,Pyspark,我有以下文件:test.json> { "id": 1, "name": "A green door", "price": 12.50, "tags": ["home", "green"] } 我想把这个文件加载到RDD中。这就是我所尝试的: rddj = sc.textFile('test.json') rdd_res = rddj.map(lambda x: json.loads(x)) 我有一个错误: 应为对象:第1行第1列(字符0) 我不完全理解jso

我有以下文件:test.json>

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"]
}
我想把这个文件加载到RDD中。这就是我所尝试的:

rddj = sc.textFile('test.json')
rdd_res = rddj.map(lambda x: json.loads(x))
我有一个错误:

应为对象:第1行第1列(字符0)

我不完全理解
json.loads
的作用


如何解决此问题?

textFile
逐行读取数据。输入的各行在语法上不是有效的JSON

只需使用json阅读器:

spark.read.json("test.json", multiLine=True)
或(不推荐)整文本文件

sc.wholeTextFiles("test.json").values().map(json.loads)

对于使用Spark textfile进行处理,JSON格式的副本可能不太好,因为它会尝试逐行处理,而JSON覆盖多行。如果您可以访问JSON行格式的JSON数据(每个JSON对象都是“扁平的”只需一行即可。或者,您可以将数据保持上述格式,并使用sc.wholeTextFiles。这将返回一个键/值rdd,其中key是文件名,value是文件内容。然后,您可以通过将上面的json.loads包装到一个通过mapPartitions应用的函数中进行处理。实际上,这可能是重复的不是一个傻瓜。谢谢你的回答。看起来是一个公平的方法。但是,我使用的spark 1.6没有spark模块。对我有效的是:rddj=hiveContext.jsonFile(“输入文件路径”)。