File JSON

Anda dapat membaca file JSON dalam mode baris tunggal atau multibaris. Dalam mode baris tunggal, sebuah file dapat dibagi menjadi banyak bagian dan dibaca secara paralel. Dalam mode multibaris, file dimuat sebagai sebuah entitas keseluruhan dan tidak dapat dibagi.

Untuk informasi lebih lanjut, lihat File JSON.

Opsi

Lihat artikel referensi Apache Spark berikut untuk opsi baca dan tulis yang didukung.

Kolom data yang diselamatkan

Catatan

Fitur ini didukung di Databricks Runtime 8.2 (tidak didukung) ke atas.

Kolom data yang disimpan memastikan bahwa Anda tidak pernah kehilangan atau ketinggalan data selama ETL. Kolom data yang diselamatkan berisi data apa pun yang tidak diurai, karena hilang dari skema yang diberikan, karena ada ketidakcocokan jenis, atau karena selubung kolom dalam baris atau file tidak cocok di skema. Kolom data yang diselamatkan dikembalikan sebagai blob JSON yang berisi kolom yang diselamatkan, dan jalur file sumber rekaman. Untuk menghapus jalur file sumber dari kolom data yang disimpan, Anda dapat mengatur konfigurasi SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Anda dapat mengaktifkan kolom data yang diselamatkan dengan mengatur opsi rescuedDataColumn ke nama kolom, seperti _rescued_data dengan spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>).

Pengurai JSON mendukung tiga mode saat mengurai baris: PERMISSIVE, DROPMALFORMED, dan FAILFAST. Ketika digunakan bersama dengan rescuedDataColumn, ketidakcocokan tipe data tidak menyebabkan catatan dijatuhkan dalam mode DROPMALFORMED atau melemparkan kesalahan dalam mode FAILFAST. Hanya baris yang rusak—yaitu JSON yang tidak lengkap atau cacat—yang dihilangkan atau menimbulkan kesalahan. Jika Anda menggunakan opsi badRecordsPath saat mengurai JSON, ketidakcocokan tipe data tidak akan dianggap sebagai baris buruk saat menggunakan rescuedDataColumn. Hanya catatan JSON yang tidak lengkap dan cacat yang disimpan di badRecordsPath.

Contoh

Mode baris tunggal

Dalam contoh ini, ada satu objek JSON untuk satu baris:

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

Untuk membaca data JSON, gunakan:

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

Spark menyimpulkan skema secara otomatis.

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)

Mode multibaris

Objek JSON ini menempati beberapa baris:

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

Untuk membaca objek ini, aktifkan mode multibaris:

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)

Deteksi otomatis tataan karakter

Secara default, tataan karakter file input terdeteksi secara otomatis. Anda dapat menentukan tataan karakter secara eksplisit dengan menggunakan opsi charset:

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

Beberapa tataan karakter yang didukung meliputi: UTF-8, UTF-16BE, UTF-16LE, UTF-16, UTF-32BE, UTF-32LE, UTF-32. Untuk daftar lengkap tataan karakter yang didukung oleh Oracle Java SE, lihat Pengodean yang Didukung.

Contoh buku catatan: Membaca file JSON

Notebook berikut menunjukkan mode baris tunggal dan mode multibaris.

Membaca buku catatan file JSON

Dapatkan buku catatan