Membaca file CSV
Artikel ini menyediakan contoh untuk membaca file CSV dengan Azure Databricks menggunakan Python, Scala, R, dan SQL.
Catatan
Databricks merekomendasikan fungsi read_files bernilai tabel bagi pengguna SQL untuk membaca file CSV. read_files
tersedia di Databricks Runtime 13.3 LTS ke atas.
Anda juga dapat menggunakan tampilan sementara. Jika Anda menggunakan SQL untuk membaca data CSV secara langsung tanpa menggunakan tampilan sementara atau read_files
, batasan berikut berlaku:
- Anda tidak dapat menentukan opsi sumber data.
- Anda tidak dapat menentukan skema untuk data.
Opsi
Anda dapat mengonfigurasi beberapa opsi untuk sumber data file CSV. Lihat artikel referensi Apache Spark berikut ini untuk opsi baca yang didukung:
Artikel ini hanya membahas tentang membaca CSV, tetapi Anda dapat mempelajari tentang opsi tulis yang didukung di artikel referensi Apache Spark berikut ini:
Bekerja dengan catatan CSV yang cacat
Saat membaca file CSV dengan skema tertentu, ada kemungkinan data dalam file tidak cocok dengan skema. Misalnya, bidang yang berisi nama kota tidak akan mengurai sebagai bilangan bulat. Konsekuensinya tergantung pada mode yang dijalankan parser:
PERMISSIVE
(default): null disisipkan untuk bidang yang tidak dapat diurai dengan benarDROPMALFORMED
: menjatuhkan garis yang berisi bidang yang tidak dapat diuraiFAILFAST
: membatalkan pembacaan jika ada data yang salah ditemukan
Untuk mengatur mode, gunakan opsi mode
.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
Dalam mode PERMISSIVE
, dimungkinkan untuk memeriksa baris yang tidak dapat diurai secara tepat dengan salah satu metode berikut ini:
- Anda dapat menyediakan jalur kustom ke opsi
badRecordsPath
untuk mencatat rekaman yang cacat ke file. - Anda dapat menambahkan kolom
_corrupt_record
pada skema yang disediakan pada DataFrameReader guna meninjau rekaman yang cacat pada DataFrame hasilnya.
Catatan
Opsi badRecordsPath
lebih penting dari _corrupt_record
, yang berarti bahwa baris yang cacat dan ditulis pada jalur yang disediakan tidak ditampilkan pada DataFrame hasilnya.
Perilaku default untuk rekaman yang cacat berubah saat menggunakan kolom data yang diselamatkan.
Menemukan notebook baris yang cacat
Kolom data yang diselamatkan
Catatan
Fitur ini didukung di Databricks Runtime 8.3 (EoS) ke atas.
Saat menggunakan mode PERMISSIVE
, Anda dapat mengaktifkan kolom data yang diselamatkan untuk mengambil setiap data yang tidak diurai, karena satu atau lebih bidang pada rekaman memiliki salah satu masalah berikut ini:
- Tidak ada pada skema yang disediakan.
- Tidak sesuai dengan jenis data skema yang disediakan.
- Memiliki ketidakcocokan kasus dengan nama bidang di dalam skema yang disediakan.
Kolom data yang diselamatkan dikembalikan sebagai dokumen 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 bisa mengaktifkan kolom data yang diselamatkan dengan mengatur opsi rescuedDataColumn
ke nama kolom, seperti _rescued_data
dengan spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
Pengurai CSV 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 CSV yang tidak lengkap atau cacat—yang dihilangkan atau menimbulkan kesalahan.
Saat rescuedDataColumn
digunakan pada mode PERMISSIVE
, aturan berikut ini berlaku pada rekaman yang cacat:
- Baris pertama file (baik baris header atau baris data) akan mengatur panjang baris yang diharapkan.
- Baris dengan jumlah kolom berbeda dianggap tidak lengkap.
- Ketidakcocokan jenis data tidak akan dianggap sebagai rekaman yang rusak.
- Hanya rekaman CSV tidak lengkap dan cacat yang dianggap rusak dan dicatat pada kolom
_corrupt_record
ataubadRecordsPath
.
Contoh SQL: Membaca file CSV
Contoh SQL berikut membaca file CSV menggunakan read_files
.
-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => true,
mode => 'FAILFAST')
Contoh Scala, R, dan Python: Membaca file CSV
Buku catatan berikut ini memperlihatkan cara membaca file, menampilkan data sampel, dan mencetak skema data menggunakan Scala, R, dan Python. Contoh di bagian ini menggunakan himpunan data berlian. Tentukan jalur ke himpunan data serta opsi apa pun yang Anda inginkan.
Membaca notebook file CSV
Contoh: Tentukan skema
Saat skema file CSV diketahui, Anda dapat menentukan skema yang diinginkan ke pembaca CSV dengan opsi schema
tersebut.
Membaca file CSV dengan notebook skema
Contoh SQL menggunakan read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Contoh: Jebakan membaca subset kolom
Perilaku parser CSV bergantung pada kumpulan kolom yang dibaca. Jika skema yang ditentukan salah, hasilnya mungkin sangat berbeda tergantung pada subset kolom yang diakses. Notebook berikut menyajikan perangkap yang paling umum.