使用 pyspark 将 json 文件读入 RDD(不是 dataFrame)
Posted
技术标签:
【中文标题】使用 pyspark 将 json 文件读入 RDD(不是 dataFrame)【英文标题】:Reading a json file into a RDD (not dataFrame) using pyspark 【发布时间】:2017-10-30 09:49:19 【问题描述】:我有以下文件: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 列 (char 0)
我不完全明白json.loads
做了什么。
我该如何解决这个问题?
【问题讨论】:
可能是***.com/questions/39430868/…的副本 JSON 格式不太适合使用 Spark 文本文件进行处理,因为它会尝试逐行处理,而 JSON 涵盖多行。如果您可以以 JSON 行格式访问您的 JSON 数据(每个 json 对象“扁平化”为单行,这将起作用。或者,您可以将数据保留为上述格式并使用 sc.wholeTextFiles。这将返回一个键/value rdd,其中 key 是文件名,value 是文件内容。然后您可以通过将上面的 json.loads 包装到您通过 mapPartitions 应用的函数中来处理。 how to read json with schema in spark dataframes/spark sql的可能重复 这其实不是骗子。 【参考方案1】:textFile
逐行读取数据。您输入的各行在语法上不是有效的 JSON。
只需使用 json 阅读器:
spark.read.json("test.json", multiLine=True)
或(不推荐)整个文本文件
sc.wholeTextFiles("test.json").values().map(json.loads)
【讨论】:
感谢您的回答。看起来是一个公平的方法。但是,我使用的是没有 spark 模块的 spark 1.6。对我有用的是:rddj = hiveContext.jsonFile("input file path"). spark.read.json 是否将数据加载到 RDD 或 Dataframe 中?我有一个巨大的 json,大约 1TB,所以它需要加载到 RDD 中以上是关于使用 pyspark 将 json 文件读入 RDD(不是 dataFrame)的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 文件读入 Spark 时出现 _corrupt_record 错误