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

10

我正在尝试将一段内存中的JSON 字符串实时读入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格式化为每行一个对象(根据文档);并且
  2. 它强制我将JSON写入临时文件,这很慢而且很麻烦;并且
  3. 它迫使我随着时间的推移清理临时文件,这很繁琐并且让我感觉“不对劲”

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


可能是如何在Spark上将JSON字符串转换为数据框架的重复问题。 - cheseaux
1个回答

14

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(....))”)。 - Thomas Decaux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接