Freigeben über


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.

Lesen des Notebooks zu JSON-Dateien

Notebook abrufen