【问题标题】:How to read in-memory JSON string into Spark DataFrame如何将内存中的 JSON 字符串读入 Spark DataFrame
【发布时间】:2017-01-29 21:28:16
【问题描述】:

我正在尝试将内存中的 JSON string 动态读取到 Spark DataFrame 中:

var someJSON : String = getJSONSomehow()
val someDF : DataFrame = magic.convert(someJSON)

我花了很多时间研究 Spark API,我能找到的最好方法是使用 sqlContext,如下所示:

var someJSON : String = getJSONSomehow()
val tmpFile : Output = Resource
    .fromFile(s"/tmp/json/${UUID.randomUUID().toString()}")
tmpFile.write("hello")(Codec.UTF8)
val someDF : DataFrame = sqlContext.read().json(tmpFile)

但这感觉有点尴尬/不可靠,并施加了以下限制:

  1. 它要求我将 JSON 格式设置为每行一个对象 (per documentation);和
  2. 它迫使我将 JSON 写入临时文件,这既慢又笨拙;和
  3. 它迫使我随着时间的推移清理临时文件,这很麻烦并且让我感觉“不对”

所以我问:有没有直接更有效的方法将 JSON 字符串转换为 Spark DataFrame?

【问题讨论】:

标签: json scala apache-spark spark-dataframe


【解决方案1】:

来自 Spark SQL 指南:

val otherPeopleRDD = spark.sparkContext.makeRDD(
"""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil)
val otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()

这会从中间 RDD(通过传递字符串创建)创建一个 DataFrame。

【讨论】:

  • 很好的是,你可以在解析前使用它来过滤错误的行(使用sqlContext.read.json(sc.textFile("...").filter(....)))
猜你喜欢
  • 2022-01-13
  • 2017-04-25
  • 2018-06-22
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
相关资源
最近更新 更多