2017-01-25 86 views
2

我想讀取火花流作業中的json數據。 默認情況下,sqlContext.read.json(rdd)將所有地圖類型轉換爲結構類型。下面JSON結構映射[字符串,字符串]使用sqlContext

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

但是,當我使用sqlContext

VAL A = sqlContext.sql從蜂巢表中讀出( 「選擇從student_record *」)

是架構。

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

有什麼辦法可以使用read.json(rdd)讀取數據並獲取Map數據類型。

有像 spark.sql.schema.convertStructToMap

任何選項的幫助表示讚賞。

回答

0

當您撥打read.json時,您需要明確定義您的模式。

您可以在Spark SQL文檔中閱讀關於Programmatically specifying the schema中的詳細信息。

例如,在特定情況下,將

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

這將是一列legal_name是一個地圖。

當您定義模式時,您可以調用 sqlContext.read.json(rdd, schema)從您的JSON數據集中創建具有所需模式的數據框。