2016-07-18 20 views
1

だから私の最初のスキーマは次のようになります。ネストされたJSONからデータフレームを作成するにはどうすればよいですか?

root 
|-- database: String 
|-- table: String 
|-- data: struct (nullable = true) 
| |-- element1: Int 
| |-- element2: Char 

show()結果がある[null,2,3]などで醜い1つのデータ列

私は何をしたいことはそれ自身のデータフレームにデータ構造体を作ることですので、私

val dfNew = df.select("data")私が代わりにスキーマで指定された複数の列のshow()を使用するときだけは本当に私に同じ総列を取得します。ネストされたJSONのデータが列の中に広がるが、何かのように持つことができますなど

これを行う方法はありますか?

+0

可能な複製(http://stackoverflow.com/questions/28332494/querying-spark-sql-dataframe-with-complex-types) – zero323

+1

[チェックアウトパンダ.io.json.json_normalize](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.json.json_normalize.html)。 –

答えて

2

このようにします。

case class Data(element1: Int, element2: String) 

val df = sqlContext.createDataFrame(sc.parallelize(Array(
     (1, Data(12312, "test"))))).toDF("i", "data") 

df.select(col("data.element1"), col("data.element2")) 

またはこれは? [複合型とスパークSQLのデータフレームの照会]の

df.select(col("data.*")) 
+0

それに合わせて、各列を指定せずにできるようにしたいので、利用できるものすべてを取ることができます。 –

+0

そうだと思います。 Pythonで動作します。 (編集済み) –

+0

その2番目は私が望むように見えます。私はこれを試しました val dfdata2 = df.select(df.col( "data。*")) そして、それはうまくいきませんでした。 –

関連する問題