Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
JSON (JavaScript Object Notation) ist ein weit verbreitetes halbstrukturiertes Format für den Datenaustausch und die Speicherung. Azure Databricks unterstützt JSON für das Lesen und Schreiben mit Apache Spark, einschließlich einzeiligen und mehrzeiligen Modi, automatischer Schema-Ableitung und geretteter Daten. Sie können JSON-Dateien aus dem Cloudspeicher mithilfe der Spark DataFrame-API oder SQL lesen und DataFrames zurück in JSON schreiben.
Voraussetzungen
Azure Databricks erfordert keine zusätzliche Konfiguration, um JSON-Dateien zu verwenden.
Optionen
Verwenden Sie die Methoden .option() und .options() von DataFrameReader und DataFrameWriter, um JSON-Datenquellen zu konfigurieren. Eine vollständige Liste der unterstützten Optionen finden Sie unter DataFrameReader JSON-Optionen und DataFrameWriter JSON-Optionen.
Usage
In den folgenden Beispielen wird das Wanderbricks-Beispiel-Dataset verwendet, um das Lesen und Schreiben von JSON-Dateien in einzeiligen und mehrzeiligen Modi mithilfe der Spark DataFrame-API und SQL zu veranschaulichen.
Schreiben und Lesen von JSON-Dateien
Im Einzelzeilenmodus (Standardeinstellung) enthält jede Zeile der Ausgabe ein vollständiges JSON-Objekt. Schreiben Sie Wanderbricks-Rezensionen in das JSON-Format, und lesen Sie sie zurück.
Python
# Write wanderbricks reviews to JSON format
df = spark.read.table("samples.wanderbricks.reviews")
df.write.format("json").save("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
# Read the JSON files into a DataFrame
df = spark.read.format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
df.printSchema()
display(df)
Scala
// Write wanderbricks reviews to JSON format
val reviews = spark.read.table("samples.wanderbricks.reviews")
reviews.write.format("json").save("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
// Read the JSON files into a DataFrame
val df = spark.read.format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
df.printSchema()
df.show()
Lesen von mehrzeiligen JSON-Dateien
Im mehrzeiligen Modus kann ein einzelnes JSON-Objekt mehrere Zeilen umfassen. Aktivieren Sie den mehrzeiligen Modus, um JSON-Dateien zu lesen, in denen Datensätze über mehrere Zeilen formatiert sind.
Python
mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(truncate=False)
Scala
val mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(false)
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/Volumes/<catalog>/<schema>/<volume>/multi-line.json",multiline=true)
Lesen von JSON-Dateien mit SQL
Sie können die read_files Tabellenwertfunktion in SQL verwenden, um JSON-Dateien zu lesen.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
Sie können auch USING JSON verwenden, um JSON-Dateien zu lesen. Databricks empfiehlt jedoch die Verwendung von read_files anstelle von USING JSON, weil read_files die Spezifikation von Schema- und zusätzlichen Dateiverarbeitungsoptionen ermöglicht.
DROP TABLE IF EXISTS reviews_json_table;
CREATE TABLE reviews_json_table
USING JSON
OPTIONS (path "/Volumes/<catalog>/<schema>/<volume>/reviews_json", multiline true);
SELECT * FROM reviews_json_table;
Angeben der Zeichencodierung
Standardmäßig wird der Zeichensatz von Eingabedateien automatisch erkannt. Sie können den Zeichensatz explizit mithilfe der Option charset angeben:
Python
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
Scala
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json',
format => 'json',
charset => 'UTF-16BE'
)
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.
Aktivieren der Spalte "Gerettete Daten"
Die gerettete Datenspalte stellt sicher, dass Während der ETL niemals Daten verloren gehen. Es erfasst alle Daten, die nicht analysiert wurden, da eines oder mehrere Felder in einem Datensatz eines der folgenden Probleme aufweisen:
- Fehlt im bereitgestellten Schema.
- Stimmt nicht mit dem Datentyp des bereitgestellten Schemas überein.
- Weist einen Fallkonflikt mit den Feldnamen im angegebenen Schema auf.
Die gespeicherte Datenspalte wird als JSON-Blob zurückgegeben, der die geretteten Spalten und den Quelldateipfad des Datensatzes enthält.
Um die gerettete Datenspalte zu aktivieren, legen Sie beim Lesen die rescuedDataColumn Option auf einen Spaltennamen fest:
Python
df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
Scala
val df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
rescuedDataColumn => '_rescued_data'
)
Wenn Sie den Quelldateipfad aus der Spalte für die geretteten Daten entfernen möchten, legen Sie Folgendes fest:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
Der JSON-Parser unterstützt drei Modi beim Analysieren von Datensätzen: PERMISSIVE, DROPMALFORMED und FAILFAST. Bei Verwendung zusammen mit rescuedDataColumn gelten die folgenden Regeln:
- Datentypkonflikten führen nicht dazu, dass Datensätze im
DROPMALFORMEDModus verworfen werden oder einen Fehler imFAILFASTModus 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 die
badRecordsPathOption verwenden, werden Datentypkonflikten nicht als ungültige Datensätze betrachtet. Nur unvollständige und falsch formatierte JSON-Datensätze werden inbadRecordsPathgespeichert.
Weitere Ressourcen
- Lesen und Schreiben von Parkettdateien: Wenn Ihre Arbeitsauslastung in erster Linie analytische und leselastig ist, bietet das Spaltenlayout von Parkett eine effizientere Abfrageleistung als das zeilenbasierte Textformat von JSON.
- Lesen und Schreiben von Avro-Dateien: Wenn Sie JSON aus einem Ereignisstreamingsystem wie Apache Kafka produzieren oder verwenden, bietet Avro eine kompaktere binäre Codierung mit Schemaentwicklungsunterstützung.