我正在尝试将内存中的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)
但这感觉有点尴尬/不稳定,并施加了以下约束:
- 它要求我将JSON格式为每行一个对象(每个文档);和
- 它迫使我将JSON写入临时文件,这是缓慢和尴尬的;和
- 它迫使我随着时间的推移清理临时文件,这很麻烦,对我来说感觉"错误"
所以我问:是否有一种直接和更有效的方法将JSON字符串转换为Spark DataFrame?
From Spark SQL guide:
val otherPeopleRDD = spark.sparkContext.makeRDD(
"""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil)
val otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()
从中间RDD(通过传递String创建)创建一个DataFrame。