使用 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 错误

使用 Pyspark 处理 JSON 结构

将多个 S3 文件夹/路径读入 PySpark

使用 Pyspark 训练随机森林回归模型

如何将 LIBSVM 模型(使用 LIBSVM 保存)读入 PySpark?

Spark 2.0 将 json 读入带有引号的数据帧中 - 与 spark 1.6 不同的行为......错误?