2017-01-25 2 views
2

Ich versuche, JSON-Daten im Spark-Streaming-Job zu lesen. Standardmäßig konvertiert sqlContext.read.json (rdd) alle Zuordnungstypen in Strukturtypen.JSON-Struktur zum Zuordnen von [String, String] mit sqlContext

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

Aber wenn ich von hive Tabelle SqlContext

mit lesen

val a = sqlContext.sql ("select * from student_record")

unten ist das Schema.

Gibt es eine Möglichkeit, können wir lesen Daten mit read.json (rdd) und erhalten Kartendaten.

gibt es eine Option wie spark.sql.schema.convertStructToMap

jede Hilfe sehr geschätzt wird.

Antwort

0

Sie müssen Ihr Schema beim Aufruf von read.json explizit definieren.

Sie können über die Details in Programmatically specifying the schema in der Spark SQL-Dokumentation lesen.

Zum Beispiel in Ihrem speziellen Fall wäre es

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

sein, dass eine Spalte legal_name eine Karte sein würde. Wenn Sie Ihr Schema definiert haben, können Sie sqlContext.read.json(rdd, schema) aufrufen, um Ihren Datenrahmen aus Ihrem JSON-Datensatz mit dem gewünschten Schema zu erstellen.