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 (EoS) 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.