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 selengkapnya, lihat dokumentasi Apache Spark di JSON Files.

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 ke atas.

Kolom data yang diselamatkan memastikan bahwa Anda tidak pernah kehilangan data selama ETL. Kolom data yang diselamatkan berisi data apa pun yang tidak diurai, baik karena hilang dari skema yang diberikan, atau karena ada ketidakcocokan jenis, atau karena casing kolom dalam rekaman atau file tidak cocok dengan yang ada dalam skema. Kolom data yang diselamatkan dikembalikan sebagai blob JSON yang berisi kolom yang diselamatkan dan jalur file sumber rekaman. Untuk menghapus path file sumber dari kolom data yang dipulihkan, atur konfigurasi SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Untuk mengaktifkan kolom data yang diselamatkan, atur 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 penghapusan catatan dalam mode DROPMALFORMED atau menghasilkan kesalahan dalam mode FAILFAST. Hanya rekor yang korup—yaitu JSON yang tidak lengkap atau cacat—yang dihilangkan atau menimbulkan kesalahan. Jika Anda menggunakan opsi badRecordsPath saat mengurai JSON, ketidakcocokan jenis data tidak dianggap buruk saat menggunakan rescuedDataColumn. Hanya catatan JSON yang tidak lengkap dan cacat yang disimpan di badRecordsPath.

Contoh

Contoh berikut menunjukkan cara membaca dan menulis file JSON menggunakan DataFrame API dan SQL.

Mode baris tunggal

Setiap baris berisi satu objek JSON:

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

Python

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

Scala

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

Spark menyimpulkan skema secara otomatis:

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 banyak baris

Objek JSON berikut mencakup 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:

Python

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

Scala

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)

Membaca file JSON menggunakan SQL

Anda dapat menggunakan read_files fungsi bernilai tabel fungsi bernilai tabel di SQL untuk membaca file JSON.

SELECT * FROM read_files(
  '<path to json file or folder>',
  format => 'json',
  multiLine => true)

Anda juga dapat menggunakan USING JSON untuk membaca file JSON. Namun, Databricks merekomendasikan penggunaan read_files alih-alih USING JSON karena read_files memungkinkan spesifikasi skema dan opsi pemrosesan file tambahan.

DROP TABLE IF EXISTS json_data;

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

SELECT * FROM json_data;

Deteksi otomatis charset

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 charset 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 file JSON di notebook

Dapatkan buku catatan