【问题标题】:Reading a json file into a RDD (not dataFrame) using pyspark使用 pyspark 将 json 文件读入 RDD(不是 dataFrame)
【发布时间】: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 做了什么。

我该如何解决这个问题?

【问题讨论】:

  • JSON 格式不太适合使用 Spark 文本文件进行处理,因为它会尝试逐行处理,而 JSON 涵盖多行。如果您可以以 JSON 行格式访问您的 JSON 数据(每个 json 对象“扁平化”为单行,这将起作用。或者,您可以将数据保留为上述格式并使用 sc.wholeTextFiles。这将返回一个键/value rdd,其中 key 是文件名,value 是文件内容。然后您可以通过将上面的 json.loads 包装到您通过 mapPartitions 应用的函数中来处理。
  • 这其实不是骗子。

标签: json apache-spark pyspark


【解决方案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 中
猜你喜欢
  • 2018-08-30
  • 2023-03-13
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多