Mehrzeiliges JSON in Apache Spark lesen
Ich habe versucht, eine JSON-Datei als kleine Datenbank zu verwenden. Nachdem ich eine Vorlagentabelle auf DataFrame erstellt hatte, fragte ich sie mit SQL ab und bekam eine Ausnahme. Hier ist mein Code:
val df = sqlCtx.read.json("/path/to/user.json")
df.registerTempTable("user_tt")
val info = sqlCtx.sql("SELECT name FROM user_tt")
info.show()
df.printSchema()
Ergebnis:
root
|-- _corrupt_record: string (nullable = true)
Meine JSON-Datei:
{
"id": 1,
"name": "Morty",
"age": 21
}
Ausnahme:
Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve 'name' given input columns: [_corrupt_record];
Wie kann ich es reparieren
UPD
_corrupt_record
ist
+--------------------+
| _corrupt_record|
+--------------------+
| {|
| "id": 1,|
| "name": "Morty",|
| "age": 21|
| }|
+--------------------+
UPD2
Es ist komisch, aber wenn ich meinen JSON umschreibe, um ihn oneliner zu machen, funktioniert alles einwandfrei.
{"id": 1, "name": "Morty", "age": 21}
So ist das Problem in einemnewline
.
UPD3
Ich habe in docs den nächsten Satz gefunden:
Beachten Sie, dass die als JSON-Datei angebotene Datei keine typische JSON-Datei ist. Jede Zeile muss ein separates, in sich geschlossenes gültiges JSON-Objekt enthalten. Infolgedessen schlägt eine reguläre mehrzeilige JSON-Datei häufig fehl.
Es ist nicht bequem, JSON in einem solchen Format zu belassen. Gibt es eine Problemumgehung, um die mehrzeilige Struktur von JSON zu entfernen oder sie in Oneliner umzuwandeln?