スパークコンテキストの上に存在するハイブテーブルがあります。表のフォーマットは以下の通り
| key | param1 | Param 2|
-------------------------
| A | A11 | A12 |
| B | B11 | B12 |
| A | A21 | A22 |
スキーマを使用して DataFrame を作成したかった
val dataSchema = new StructType(
Array(
StructField("key", StringType, nullable = true),
StructField("param", ArrayType(
StructType( Array(
StructField("param1", StringType, nullable = true),
StructField("param2", StringType, nullable = true)
)), containsNull = true), nullable = true)
)
)
上表より
ファイナルテーブルになるように
| key | param |
-------------------------------------------------------------
| A | [{param1:A11, param2:A12},{param1:A11, param2:A12}]|
| B | [{param1:B11, param2:B12}] |
データフレームを返すハイブコンテキスト(hiveContext.table( "table_name"))を使用してテーブルをロードしています。
scala> val df = hiveContext.table("sample")
df: org.apache.spark.sql.DataFrame = [fk: string, param1: string, param2: string]
scala> val dfStruct = df.select($"key", struct($"param1", $"param2").alias("param"))
dfStruct: org.apache.spark.sql.DataFrame = [fk: string, sub: struct<param1:string,param2:string>]
scala> dfStruct.show
+--+----------+
|fk| param|
+--+----------+
| A| [A11,A12]|
| B| [B11,B12]|
| A| [A21,A22]|
+--+----------+
scala>
groupByを使用して、上記のようにデータフレームを使用してテーブルに変換しようとしています。しかし、できません。