2016-09-21 3 views
3

:私はかなり費やしてきたどのようにスパークデータフレームにメモリ内のJSON文字列を読み取るために、私はその場でスパークデータフレームの中に、メモリ内のJSON <strong>文字列</strong>を読みしようとしている

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

時間のスパーク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を1行に1つのオブジェクトにフォーマットする必要があります(per documentation)。そして
  2. 私は、JSONを一時ファイルに書き込む必要があります。これは遅くて扱いにくいものです。そして私に
  3. それは面倒である、時間をかけて一時ファイルをクリーンアップするために私を強制し、「間違っている」と感じ

は、だから私は尋ねる:はにJSON文字列を変換するための直接的かつより効率的な方法はありますSpark DataFrame?スパークSQLガイドから

+0

[jsonの文字列をsparkのデータフレームに変換する方法](http://stackoverflow.com/questions/38271611/how-to-convert-json-string-to-dataframe-on-spark) – cheseaux

答えて

7

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

これは(文字列を渡すことによって作成された)中間RDDからデータフレームを作成します。

+0

ブーム - ありがとう、+1! – smeeb

+0

非常に良いことは、 '' sqlContext.read.json(sc.textFile( "...")。filter(....)) ''を使って、 –

関連する問題