Aracılığıyla paylaş


JSON dosyaları

JSON dosyalarını tek satırlı veya çok satırlı modda okuyabilirsiniz. Tek satırlı modda bir dosya birçok bölüme bölünebilir ve paralel olarak okunabilir. Çok satırlı modda, bir dosya tüm varlık olarak yüklenir ve bölünemez .

Daha fazla bilgi için JSON Dosyalarıyla ilgili Apache Spark belgelerine bakın.

Seçenekler

Desteklenen okuma ve yazma seçenekleri için aşağıdaki Apache Spark başvuru makalelerine bakın.

Kurtarılan veri sütunu

Not

Bu özellik Databricks Runtime 8.2 (EoL) ve üzerinde desteklenir.

Kurtarılan veri sütunu, ETL sırasında veri kaybı yaşamamanızı sağlar. Kurtarılan veriler sütunu, belirtilen şemadan eksik olması, tür uyuşmazlığı olması veya kayıt ya da dosyadaki sütunun büyük/küçük harf durumu şemadakiyle eşleşmemesi nedeniyle ayrıştırılmamış verileri içerir. 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ütunundan kaynak dosya yolunu kaldırmak için SQL yapılandırmasını spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")ayarlayın. Kurtarılan veri sütununu etkinleştirmek için seçeneğini rescuedDataColumn ile _rescued_datagibi bir sütun adı olarak spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)ayarlayın.

JSON ayrıştırıcısı kayıtları ayrıştırırken üç modu destekler: PERMISSIVE, DROPMALFORMEDve FAILFAST. rescuedDataColumn ile birlikte kullanıldığında, veri türü uyuşmazlıkları kayıtların DROPMALFORMED modunda bırakılmasına veya FAILFAST modunda hata oluşturmasına neden olmaz. Yalnızca bozuk kayıtlar (eksik veya hatalı biçimlendirilmiş JSON) bırakılır veya hata oluşturur. JSON ayrıştırırken badRecordsPath seçeneğini kullanırsanız, rescuedDataColumn kullanırken veri türü uyuşmazlıkları hatalı kayıt olarak kabul edilmez. yalnızca eksik ve yanlış biçimlendirilmiş JSON kayıtları içinde badRecordsPathdepolanır.

Örnekler

Aşağıdaki örneklerde DataFrame API'sini ve SQL'i kullanarak JSON dosyalarını okuma ve yazma işlemi gösterilmektedir.

Tek satırlı mod

Her satır bir JSON nesnesi içerir:

{"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"}}

JSON verilerini okumak için şunu kullanın:

Python

df = spark.read.format("json").load("example.json")
df.printSchema()

Scala programlama dili

val df = spark.read.format("json").load("example.json")
df.printSchema

Spark şemayı otomatik olarak çıkarsar:

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)

Çok satırlı mod

Aşağıdaki JSON nesnesi birden çok satıra yayılmıştır:

[
  { "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"
    }
  }
]

Bu nesneyi okumak için çok satırlı modu etkinleştirin:

Python

mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(truncate=False)

Scala programlama dili

val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)

SQL

CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/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(
  '<path to json file or folder>',
  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 json_data;

CREATE TABLE json_data
USING JSON
OPTIONS (path "/path/to/file.json", multiline true);

SELECT * FROM json_data;

Charset otomatik algılama

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:

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

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.

Not defteri örneği: JSON dosyalarını okuma

Aşağıdaki not defterinde tek satırlı mod ve çok satırlı mod gösterilmektedir.

JSON dosyalarını not defteri ile okuma

not defteri alma