JSON-Datei
Sie können JSON-Dateien im Einzeilen- oder Mehrzeilenmodus lesen. Im Einzeilenmodus kann eine Datei in viele Teile aufgeteilt und parallel gelesen werden. Im Mehrzeilenmodus wird eine Datei als ganze Entität geladen und kann nicht aufgeteilt werden.
Weitere Informationen finden Sie unter JSON-Dateien.
Optionen
Die unterstützten Optionen für Lesen und Schreiben finden Sie in den folgenden Apache Spark-Referenzartikeln.
Spalte für gerettete Daten
Hinweis
Dieses Feature wird in Databricks Runtime 8.2 (EoS) und höher unterstützt.
Die Spalte für gerettete Daten stellt sicher, dass während des ETL-Prozesses keine Daten verloren gehen oder übergangen werden. Die Spalte für gerettete Daten enthält alle Daten, die nicht analysiert wurden, entweder weil sie im gegebenen Schema fehlten, weil es eine Typübereinstimmung gab oder weil die Groß- und Kleinschreibung der Spalte im Datensatz oder in der Datei nicht mit der im Schema übereinstimmte. Die gerettete Datenspalte wird als JSON-Blob zurückgegeben, das die geretteten Spalten und den Quelldateipfad des Datensatzes enthält. Um den Quelldateipfad aus der Spalte „Gerettete Daten“ zu entfernen, können Sie die SQL-Konfiguration spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
festlegen. Sie können die Spalte „Gerettete Daten“ aktivieren, indem Sie die Option rescuedDataColumn
auf einen Spaltennamen festlegen, wie etwa _rescued_data
mit spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
.
Der JSON-Parser unterstützt drei Modi beim Analysieren von Datensätzen: PERMISSIVE
, DROPMALFORMED
und FAILFAST
. Bei Verwendung mit rescuedDataColumn
führen Datentypkonflikte nicht dazu, dass Datensätze im Modus DROPMALFORMED
gelöscht werden oder im Modus FAILFAST
einen Fehler auslösen. Nur beschädigte Datensätze, d. h. unvollständige oder falsch formatierte JSON-Dateien, werden verworfen oder führen zu Fehlern. Wenn Sie beim Analysieren von JSON-Daten badRecordsPath
verwenden, werden Datentypkonflikte bei Verwendung von rescuedDataColumn
nicht als fehlerhafte Datensätze betrachtet. Nur unvollständige und falsch formatierte JSON-Datensätze werden in badRecordsPath
gespeichert.
Beispiele
Einzeiligen Modus
In diesem Beispiel gibt es ein JSON-Objekt pro Zeile:
{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}}
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
{"string":"string3","int":3,"array":[3,6,9],"dict": {"key": "value3", "extra_key": "extra_value3"}}
Verwenden Sie Folgendes zum Lesen der JSON-Daten:
val df = spark.read.format("json").load("example.json")
Spark leitet das Schema automatisch ab.
df.printSchema
root
|-- array: array (nullable = true)
| |-- element: long (containsNull = true)
|-- dict: struct (nullable = true)
| |-- extra_key: string (nullable = true)
| |-- key: string (nullable = true)
|-- int: long (nullable = true)
|-- string: string (nullable = true)
Mehrzeilenmodus
Dieses JSON-Objekt erstreckt sich über mehrere Zeilen:
[
{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}},
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}},
{
"string": "string3",
"int": 3,
"array": [
3,
6,
9
],
"dict": {
"key": "value3",
"extra_key": "extra_value3"
}
}
]
Aktivieren Sie den Mehrzeilenmodus, um dieses Objekt lesen zu können:
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)
Scala
val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)
Automatische Erkennung von Zeichensätzen
Standardmäßig wird der Zeichensatz von Eingabedateien automatisch erkannt. Sie können den Zeichensatz explizit mithilfe der Option charset
angeben:
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
Zu den unterstützten Zeichensätzen gehören beispielsweise: UTF-8
, UTF-16BE
, UTF-16LE
, UTF-16
, UTF-32BE
, UTF-32LE
und UTF-32
. Die vollständige Liste der von Oracle Java SE unterstützten Zeichensätze finden Sie unter Unterstützte Codierungen.
Notebookbeispiel: Lesen von JSON-Dateien
Das folgende Notebook veranschaulicht den Einzeilen- und Mehrzeilenmodus.