Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
JSON (JavaScript Object Notation) je široce používaný částečně strukturovaný formát pro výměnu a ukládání dat. Azure Databricks podporuje JSON pro čtení i zápis pomocí Apache Sparku, včetně jednořádkových a víceřádkových režimů, automatického odvozování schématu a záchranných dat. Soubory JSON můžete číst z cloudového úložiště pomocí rozhraní API datového rámce Sparku nebo SQL a zapisovat datové rámce zpět do formátu JSON.
Předpoklady
Azure Databricks nevyžaduje další konfiguraci pro použití souborů JSON.
Možnosti
Ke konfiguraci zdrojů dat JSON použijte metody .option() a .options() objektů DataFrameReader a DataFrameWriter. Úplný seznam podporovaných možností najdete v tématu DataFrameReader Možnosti JSON a DataFrameWriter možnosti JSON.
Usage
Následující příklady používají ukázkovou datovou sadu Wanderbricks k předvedení čtení a zápisu souborů JSON v jednořádkovém a víceřádkovém režimu pomocí rozhraní API datového rámce Sparku a SQL.
Zápis a čtení souborů JSON
V jednořádkovém režimu (výchozí nastavení) každý řádek výstupu obsahuje jeden úplný objekt JSON. Napište recenze Wanderbricks do formátu JSON a pak je znovu přečtěte.
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()
Čtení víceřádkových souborů JSON
V režimu víceřádkového režimu může jeden objekt JSON překlenovat více řádků. Povolte režim víceřádkového čtení souborů JSON, ve kterých jsou záznamy formátované napříč více řádky.
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)
Čtení souborů JSON pomocí SQL
Ke čtení souborů JSON můžete použít read_files funkci tabulkové funkce s hodnotou tabulky v SQL.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
Můžete také použít USING JSON ke čtení souborů JSON. Databricks ale místo toho doporučuje použití read_filesUSING JSON , protože read_files umožňuje specifikaci schématu a další možnosti zpracování souborů.
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;
Určení kódování znaků
Ve výchozím nastavení se znaková sada vstupních souborů rozpozná automaticky. Znakovou sadu můžete explicitně zadat pomocí charset možnosti:
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'
)
Mezi podporované znakové sady patří: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, . UTF-32 Úplný seznam znakových sad podporovaných Oracle Java SE najdete v části Podporované kódování.
Povolte sloupec se zachráněnými daty
Sloupec zachráněných dat zajišťuje, že během ETL nikdy nepřijdete o data. Zaznamenává všechna data, která nebyla analyzována, protože jedno nebo více polí v záznamu má jeden z následujících problémů:
- Chybí ze zadaného schématu.
- Neodpovídá datovému typu zadaného schématu.
- Neshoduje se s názvy polí v zadaném schématu.
Uložený datový sloupec se vrátí jako objekt blob JSON obsahující záchranné sloupce a cestu ke zdrojovému souboru záznamu.
Chcete-li povolit sloupec pro zachráněná data, nastavte při čtení možnost rescuedDataColumn na název sloupce:
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'
)
Pokud chcete odebrat cestu ke zdrojovému souboru ze sloupce zachráněných dat, nastavte:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
Analyzátor JSON podporuje při analýze záznamů tři režimy: PERMISSIVE, DROPMALFORMEDa FAILFAST. Při použití společně s rescuedDataColumn platí následující pravidla:
- Neshody datových typů nezpůsobí vyřazení záznamů v
DROPMALFORMEDrežimu nebo vyvolání chyby vFAILFASTrežimu. - Zahodí se jenom poškozené záznamy ( tj. neúplné nebo poškozené JSON) nebo vyvolá chyby.
- Pokud použijete
badRecordsPathtuto možnost, neshody datových typů se nepovažují za chybné záznamy. Jsou uloženy pouze neúplné a poškozené záznamy JSON vbadRecordsPath.
Dodatečné zdroje
- Čtení a zápis souborů Parquet: Pokud je vaše úloha primárně analytická a silná pro čtení, sloupcové rozložení Parquet nabízí efektivnější výkon dotazů než textový formát založený na řádcích JSON.
- Čtení a zápis souborů Avro: Pokud vytváříte nebo využíváte JSON ze systému streamování událostí, jako je Apache Kafka, Avro poskytuje kompaktnější binární kódování s podporou vývoje schématu.