如何将内存中的 JSON 字符串读入 Spark DataFrame

How to read in-memory JSON string into Spark DataFrame

我正在尝试将内存中的 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)

但这感觉有点 awkward/wonky 并施加了以下限制:

  1. 它要求我将 JSON 格式化为每行一个对象 (per documentation);和
  2. 它迫使我将 JSON 写入一个临时文件,这又慢又笨拙;和
  3. 它迫使我随着时间的推移清理临时文件,这很麻烦,我觉得 "wrong"

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

来自 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。