2016-06-14 46 views
1

私の要件は、入力パラメータとしてdataframeをjson形式のデータをhdfsに保存するscalaクラスに渡すことです。sparksqlデータフレームをjsonに変換する

入力パラメータは次のようになります。

def write(xx: ReportA) = JsObject(
     "field1" -> JsString(xx.parm1), 
     "field2" -> JsString(xx.parm2), 
     "field3" -> JsNumber(xx.parm3), 
     "field4" -> JsNumber(xx.parm4), 
     "field5" -> JsArray(xx.parm5) 
    ) 

parm5データフレームをされ、JSON配列として変換したい:

case class ReportA(
        parm1: String, 
        parm2: String, 
        parm3: Double, 
        parm4: Double, 
        parm5: DataFrame 
       ) 

私のようなこのパラメータのJSONオブジェクトを作成しました。

データフレームをJson配列に変換するにはどうすればよいですか?

ありがとうございました!

+0

下記のURLからjsonメソッドを参照してください。https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/sql/DataFrame.html? –

答えて

2

DataFrameは、行と列を持つ、データベース内のプレーンな古いテーブルと同等であることがわかります。あなただけが配列に来るwoud最も近いが、次のような構造となり、それから、単純な配列を取得することはできません。

[ 
    "col1": [val1, val2, ..], 
    "col2": [val3, val4, ..], 
    "col3": [val5, val6, ..] 
] 

類似した構造を実現するには、データフレームのAPIのtoJSON方法を使用することができますRDD<String>を取得してからcollectを実行してください(OutOfMemoryの例外に注意してください)。

これでArray[String]となり、使用しているJSONライブラリに応じてJsonArrayに変換することができます。

Sparkを使用するのは本当に奇妙な方法ですが、通常はRDDやDataFrameを直接オブジェクトの1つに出力して変換することはありません。通常は、ストレージソリューションにその内容を書き出します。

+1

注:このメソッドの名前は 'toJSON'(JSONはすべて大文字)です。 –

+0

@JoshRosen確かに、私は自分の答えを更新しました、それを指摘してくれてありがとう! –

関連する問題