2017-06-28 3 views
0

Ich habe eine Hive-Tabelle Spalte (Json_String String) es hat einige 1000 Zeilen, wobei jede Zeile ein Json der gleichen Struktur ist. Ich versuche, die json um Datenrahmen wie untenWie lese ich Hive-Tabelle mit Spalte mit JSON-Strings?

val df = sqlContext.read.json("select Json_String from json_table") 

lesen, aber es ist die unten stehende Ausnahme

java.io.IOException: No input paths specified in job 

ist es eine Möglichkeit, die alle Zeilen, um Datenrahmen zu lesen werfen, wie wir mit Json tun Dateien Wild card

val df = sqlContext.read.json("file:///home/*.json") 

Antwort

1

ich denke mit, was Sie fragen, ist die Hive-Tabelle wie gewohnt und verwandeln die JSON Spalte from_json Funktion zu lesen.

from_json (e: Säule, schema: StructType): Spalte Analysiert eine Spalte eine JSON Zeichenfolge in ein StructType mit dem angegebenen Schema enthält. Gibt im Falle einer nicht analysierbaren Zeichenfolge null zurück.

Gegeben Sie sqlContext in Ihrem Code verwenden, ich habe Angst, dass Sie Spark-< 2.1.0 verwenden, die dann nicht from_json anbietet (die in 2.1.0 hinzugefügt wurde).

Die Lösung ist dann, eine benutzerdefinierte benutzerdefinierte Funktion (UDF) zu verwenden, um die Analyse selbst durchzuführen.

val df = sqlContext.read.json ("select Json_String von json_table")

Die oben wird nicht funktionieren, da json Betreiber einen Pfad oder Pfade zu JSON-Dateien auf dem Datenträger erwartet (nicht als ein Ergebnis der Ausführung einer Abfrage gegen eine Hive-Tabelle).

json (Pfade: String *): Lädt ein Datenrahmen JSON Datei (JSON Zeilen Text-Format oder Neue-Zeile-separierte JSON) und gibt das Ergebnis als einen Datenrahmen.

Verwandte Themen