2017-01-25 15 views
2

sparkストリーミングジョブでjsonデータを読み取ろうとしています。 デフォルトでは、sqlContext.read.json(rdd)はすべてのマップ型を構造体型に変換しています。JSON構造体とsqlContextを使用して[String、String]をマップする

|-- legal_name: struct (nullable = true) 
| |-- first_name: string (nullable = true) 
| |-- last_name: string (nullable = true) 
| |-- middle_name: string (nullable = true) 

しかし、私はsqlContext

以下

ヴァルA = sqlContext.sql( "student_recordから*を選択する")

を使用してハイブテーブルから読み込まれたスキーマです。

|-- leagalname: map (nullable = true) 
| |-- key: string 
| |-- value: string (valueContainsNull = true) 

read.json(rdd)を使用してデータを読み取り、マップデータ型を取得する方法はありますか。

任意のヘルプは高く評価され spark.sql.schema.convertStructToMap

のような任意のオプションがあります。

答えて

0

read.jsonを呼び出すときは、スキーマを明示的に定義する必要があります。

詳細については、Programmatically specifying the schemaのSpark SQLドキュメントを参照してください。

あなたの特定のケースでは例えば、それはマップされて1列legal_nameだろう

import org.apache.spark.sql.types._ 
val schema = StructType(List(StructField("legal_name",MapType(StringType,StringType,true)))) 

だろう。

スキーマを定義したら、 sqlContext.read.json(rdd, schema)を呼び出して、目的のスキーマでJSONデータセットからデータフレームを作成できます。

関連する問題