Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JSON (JavaScript Nesne Gösterimi), veri alışverişi ve depolama için yaygın olarak kullanılan yarı yapılandırılmış bir biçimdir. Azure Databricks tek satırlı ve çok satırlı modlar, otomatik şema çıkarımı ve kurtarılan veriler dahil olmak üzere Apache Spark ile hem okuma hem de yazma için JSON desteği sunar. Spark DataFrame API'sini veya SQL'i kullanarak bulut depolamadan JSON dosyalarını okuyabilir ve DataFrame'leri JSON'a geri yazabilirsiniz.
Prerequisites
Azure Databricks JSON dosyalarını kullanmak için ek yapılandırma gerektirmez.
Seçenekler
JSON veri kaynaklarını yapılandırmak için .option() ve .options() öğelerinin DataFrameReader ve DataFrameWriter yöntemlerini kullanın. Desteklenen seçeneklerin tam listesi için bkz DataFrameReader . JSON seçenekleri ve DataFrameWriter JSON seçenekleri.
Usage
Aşağıdaki örneklerde Spark DataFrame API'sini ve SQL'i kullanarak tek satırlı ve çok satırlı modlarda JSON dosyalarını okuma ve yazma işlemini göstermek için Wanderbricks örnek veri kümesi kullanılmıştır.
JSON dosyalarını yazma ve okuma
Tek satır modunda (varsayılan), çıkışın her satırı bir tam JSON nesnesi içerir. Wanderbricks incelemelerini JSON biçimine yazın ve sonra tekrar okuyun.
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 programlama dili
// 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()
Çok satırlı JSON dosyalarını okuma
Çok satırlı modda tek bir JSON nesnesi birden çok satıra yayılabilir. Kayıtların birden çok satırda biçimlendirildiği JSON dosyalarını okumak için çok satırlı modu etkinleştirin.
Python
mdf = spark.read.option("multiline", "true").format("json").load("/Volumes/<catalog>/<schema>/<volume>/multi-line.json")
mdf.show(truncate=False)
Scala programlama dili
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)
SQL kullanarak JSON dosyalarını okuma
SQL'de tablo değerli işleviread_files JSON dosyalarını okumak için kullanabilirsiniz.
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/reviews_json',
format => 'json',
multiLine => true)
JSON dosyalarını okumak için de kullanabilirsiniz USING JSON . Ancak Databricks, şemanın belirtimine ve ek dosya işleme seçeneklerine izin verdiğinden yerine read_filesUSING JSON kullanılmasını read_files önerir.
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;
Karakter kodlaması belirtme
Varsayılan olarak, giriş dosyalarının karakter kümesi otomatik olarak algılanır. Charset'i şu seçeneği kullanarak charset açıkça belirtebilirsiniz:
Python
spark.read.option("charset", "UTF-16BE").format("json").load("/Volumes/<catalog>/<schema>/<volume>/fileInUTF16.json")
Scala programlama dili
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'
)
Desteklenen karakter kümelerinden bazıları şunlardır: , , , , , UTF-8UTF-16BE, UTF-16LE. UTF-16UTF-32BEUTF-32LEUTF-32 Oracle Java SE tarafından desteklenen karakter kümelerinin tam listesi için bkz. desteklenen kodlamalar
Kurtarılan veri sütununu etkinleştirme
Kurtarılan veri sütunu, ETL sırasında veri kaybı yaşamamanızı sağlar. Kayıttaki bir veya daha fazla alan aşağıdaki sorunlardan birine sahip olduğundan ayrıştırılamayan verileri yakalar:
- Sağlanan şemada yok.
- Sağlanan şemanın veri türüyle eşleşmiyor.
- Sağlanan şemadaki alan adlarıyla büyük/küçük harf uyuşmazlığı var.
Kurtarılan veri sütunu, kurtarılan sütunları ve kaydın kaynak dosya yolunu içeren bir JSON blobu olarak döndürülür.
Kurtarılan veri sütununu etkinleştirmek için, okuma sırasında rescuedDataColumn seçeneğini bir sütun adına ayarlayın:
Python
df = spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load("/Volumes/<catalog>/<schema>/<volume>/reviews_json")
Scala programlama dili
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'
)
Kurtarılan veri sütunundan kaynak dosya yolunu kaldırmak için şunu ayarlayın:
spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
JSON ayrıştırıcısı kayıtları ayrıştırırken üç modu destekler: PERMISSIVE, DROPMALFORMEDve FAILFAST. ile rescuedDataColumnbirlikte kullanıldığında aşağıdaki kurallar geçerlidir:
- Veri türü uyuşmazlıkları,
DROPMALFORMEDmodunda kayıtların elenmesine veyaFAILFASTmodunda hata verilmesine neden olmaz. - Yalnızca bozuk kayıtlar (eksik veya hatalı biçimlendirilmiş JSON) bırakılır veya hata oluşturur.
- seçeneğini kullanırsanız
badRecordsPath, veri türü uyuşmazlıkları hatalı kayıtlar olarak kabul edilmez. yalnızca eksik ve yanlış biçimlendirilmiş JSON kayıtları içindebadRecordsPathdepolanır.
Ek kaynaklar
- Parquet dosyalarını okuma ve yazma: İş yükünüz öncelikli olarak analitik ve okuma ağırlıklıysa, Parquet'in sütunlu düzeni JSON'un satır tabanlı metin biçiminden daha verimli sorgu performansı sunar.
- Avro dosyalarını okuma ve yazma: Apache Kafka gibi bir olay akış sistemindeN JSON üretiyor veya kullanıyorsanız, Avro şema evrimi desteğiyle daha kompakt bir ikili kodlama sağlar.