Share via


JSON dosyası

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 bkz . JSON Dosyaları.

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

Dekont

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

Kurtarılan veri sütunu, ETL sırasında verileri asla kaybetmenizi veya kaçırmamanızı sağlar. Kurtarılan veri sütunu, belirtilen şemada eksik olduğundan veya tür uyuşmazlığı olduğundan ya da kayıt veya dosyadaki sütunun büyük/küçük harfle şemadakiyle eşleşmediğinden 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")ayarlayabilirsiniz. kurtarılan veri sütununu etkinleştirmek için seçeneğini rescuedDataColumn ile spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)gibi _rescued_data bir sütun adı olarak ayarlayabilirsiniz.

JSON ayrıştırıcısı kayıtları ayrıştırırken üç modu destekler: PERMISSIVE, DROPMALFORMEDve FAILFAST. ile rescuedDataColumnbirlikte kullanıldığında, veri türü uyuşmazlıkları kayıtların modda DROPMALFORMED bırakılmasına veya modda hata FAILFAST 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 seçeneğini badRecordsPath kullanırsanız, kullanırken veri türü uyuşmazlıkları hatalı kayıt rescuedDataColumnolarak kabul edilmez. yalnızca eksik ve yanlış biçimlendirilmiş JSON kayıtları içinde badRecordsPathdepolanır.

Örnekler

Tek satırlı mod

Bu örnekte, satır başına bir JSON nesnesi vardı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"}}

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

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

Spark şemayı otomatik olarak çıkarsar.

df.printSchema
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

Bu JSON nesnesi birden çok satır kaplar:

[
  {"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:

SQL

CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)

Scala

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

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-32BEUTF-32LE, UTF-32. UTF-16UTF-16LEUTF-16BEUTF-8 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ı not defterini okuma

Not defterini alma