Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
JSON (JavaScript Object Notation) to powszechnie używany częściowo ustrukturyzowany format wymiany i przechowywania danych. Azure Databricks obsługuje format JSON do odczytu i zapisu w Apache Spark, w tym tryb jednowierszowy i wielowierszowy, automatyczne wnioskowanie o schemacie oraz dane odzyskane. Pliki JSON można odczytywać z magazynu w chmurze przy użyciu interfejsu API ramki danych platformy Spark lub języka SQL i zapisywać ramki danych z powrotem do formatu JSON.
Prerequisites
Azure Databricks nie wymaga dodatkowej konfiguracji do korzystania z plików JSON.
Opcje
.option() Użyj metod .options() i DataFrameReader , DataFrameWriter aby skonfigurować źródła danych JSON. Aby uzyskać pełną listę obsługiwanych opcji, zobacz DataFrameReader opcje JSON i DataFrameWriter opcje JSON.
Usage
W poniższych przykładach użyto przykładowego zestawu danych Wanderbricks, aby zademonstrować odczyt i zapis plików JSON w trybie jednowierszowym i wielowierszowym przy użyciu interfejsu API Spark DataFrame oraz języka SQL.
Zapisywanie i odczytywanie plików JSON
W trybie jednowierszowym (domyślnym) każdy wiersz danych wyjściowych zawiera jeden kompletny obiekt JSON. Napisz recenzje Wanderbricks do formatu JSON, a następnie przeczytaj je z powrotem.
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)
Skala
// 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()
Odczytywanie wielowierszowych plików JSON
W trybie wielowierszowym pojedynczy obiekt JSON może obejmować wiele wierszy. Włącz tryb wielowierszowy, aby odczytywać pliki JSON, w których rekordy są formatowane w wielu wierszach.
Python
mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(truncate=False)
Skala
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)
Odczytywanie plików JSON przy użyciu języka SQL
Funkcję wartości tabelarycznych w języku SQL można używać do odczytywania plików JSON.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
Możesz również użyć USING JSON polecenia , aby odczytać pliki JSON. Jednak usługa Databricks zaleca użycie read_files zamiast USING JSON , ponieważ read_files umożliwia określenie schematu i dodatkowych opcji przetwarzania plików.
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;
Określanie kodowania znaków
Domyślnie zestaw znaków plików wejściowych jest wykrywany automatycznie. Możesz jawnie określić zestaw znaków przy użyciu charset opcji :
Python
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
Skala
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'
)
Niektóre obsługiwane zestawy znaków to: UTF-8, , UTF-16BE, UTF-16LEUTF-16, UTF-32BE, UTF-32LE, . UTF-32 Aby uzyskać pełną listę zestawów znaków obsługiwanych przez program Oracle Java SE, zobacz Supported Encodings.
Włącz kolumnę odzyskanych danych
Uratowana kolumna danych gwarantuje, że nigdy nie utracisz danych podczas etL. Przechwytuje wszystkie dane, które nie zostały przeanalizowane, ponieważ co najmniej jedno pole w rekordzie ma jeden z następujących problemów:
- Brak podanego schematu.
- Nie jest zgodny z typem danych podanego schematu.
- Ma niezgodność pisowni liter z nazwami pól w podanym schemacie.
Uratowana kolumna danych jest zwracana jako obiekt blob JSON zawierający uratowane kolumny i ścieżkę pliku źródłowego rekordu.
Aby włączyć kolumnę odzyskanych danych, ustaw opcję rescuedDataColumn na nazwę kolumny podczas wczytywania:
Python
df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
Skala
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'
)
Aby usunąć ścieżkę pliku źródłowego z uratowanej kolumny danych, ustaw:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
Analizator JSON obsługuje trzy tryby podczas analizowania rekordów: PERMISSIVE, DROPMALFORMEDi FAILFAST. W przypadku używania razem z rescuedDataColumn, obowiązują następujące zasady:
- Niezgodności typów danych nie powodują odrzucania rekordów w trybie
DROPMALFORMEDani zgłoszenia błędu w trybieFAILFAST. - Tylko uszkodzone rekordy — czyli niekompletne lub źle sformułowane dane JSON — są porzucane lub zgłaszane są błędy.
- Jeśli używasz
badRecordsPathopcji, niezgodności typów danych nie są uznawane za nieprawidłowe rekordy. W plikubadRecordsPathsą przechowywane tylko niekompletne i źle sformułowane rekordy JSON.
Dodatkowe zasoby
- Odczytywanie i zapisywanie plików Parquet: jeśli obciążenie ma głównie charakter analityczny i jest zdominowane przez operacje odczytu, kolumnowy układ Parquet zapewnia wyższą wydajność zapytań niż tekstowy format JSON oparty na wierszach.
- Odczytywanie i zapisywanie plików Avro: w przypadku tworzenia lub używania kodu JSON z systemu przesyłania strumieniowego zdarzeń, takiego jak Apache Kafka, avro zapewnia bardziej kompaktowe kodowanie binarne z obsługą ewolucji schematu.