Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Azure Databricks mendukung sumber data file biner, yang membaca file biner dan mengonversi setiap file menjadi satu rekaman yang berisi konten mentah dan metadata file. Biasanya digunakan untuk memuat data yang tidak terstruktur seperti gambar, audio, atau file PDF untuk pemrosesan hilir atau inferensi ML. Untuk membaca file biner, tentukan sumber data format sebagai binaryFile.
Prasyarat
Azure Databricks tidak memerlukan konfigurasi tambahan untuk menggunakan file biner.
Opsi
.option() Gunakan metode .options() dan DataFrameReader untuk mengonfigurasi sumber data file biner. Untuk daftar lengkap opsi yang didukung, lihat Referensi opsi Spark API.
Skema keluaran
Sumber data file biner menghasilkan DataFrame dengan kolom berikut, ditambah kolom partisi apa pun:
-
path (StringType): Jalur lokasi file. -
modificationTime (TimestampType): Waktu modifikasi file. Dalam beberapa implementasi Hadoop FileSystem, parameter ini mungkin tidak tersedia dan nilainya akan diatur ke nilai default. -
length (LongType): Panjang file dalam byte. -
content (BinaryType): Isi dari file tersebut.
Usage
Contoh berikut menunjukkan pemuatan file biner menggunakan Spark DataFrame API dan SQL, pemfilteran menurut jenis file, menampilkan pratinjau gambar, dan menyimpan ke tabel Delta untuk meningkatkan performa baca.
Membaca file biner
Gunakan APACHE Spark DataFrame API untuk memuat file biner ke dalam DataFrame untuk transformasi, tampilan, atau pemrosesan hilir.
Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
display(df)
Scala
val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
df.show()
SQL
SELECT path, length, modificationTime FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile'
)
Konfigurasikan opsi pembacaan
Untuk memuat file dengan jalur yang cocok dengan pola glob tertentu sambil menjaga perilaku penemuan partisi, Anda dapat menggunakan opsi pathGlobFilter. Kode berikut membaca semua file JPG dari direktori input dengan penemuan partisi:
Python
df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")
Scala
val df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
pathGlobFilter => '*.jpg'
)
Jika Anda ingin mengabaikan penemuan partisi dan mencari file secara rekursif di bawah direktori input, gunakan opsi recursiveFileLookup. Opsi ini mencari melalui direktori berlapis bahkan jika nama mereka tidak mengikuti skema penamaan partisi seperti date=2019-07-01.
Kode berikut membaca semua file JPG secara rekursif dari direktori input dan mengabaikan penemuan partisi:
Python
df = (spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/"))
Scala
val df = spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
pathGlobFilter => '*.jpg',
recursiveFileLookup => true
)
Memuat dan menampilkan gambar
Databricks merekomendasikan agar Anda menggunakan sumber data file biner untuk memuat data gambar. Fungsi Databricks display mendukung tampilan data gambar yang dimuat menggunakan sumber data biner.
Jika semua file yang dimuat memiliki nama file dengan ekstensi gambar, pratinjau gambar diaktifkan secara otomatis:
Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df) # image thumbnails are rendered in the "content" column
Scala
val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile'
)
Atau, Anda dapat memaksa fungsionalitas pratinjau gambar dengan menggunakan opsi mimeType dengan nilai string "image/*" untuk membuat anotasi kolom biner. Gambar diterjemahkan berdasarkan informasi formatnya dalam konten biner. Jenis gambar yang didukung adalah bmp, gif, jpeg, dan png. File yang tidak didukung muncul sebagai ikon gambar yang rusak.
Python
df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
Scala
val df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
mimeType => 'image/*'
)
Lihat Solusi referensi untuk aplikasi gambar untuk alur kerja yang direkomendasikan untuk menangani data gambar.
Simpan ke tabel Delta
Untuk meningkatkan performa baca saat Anda memuat data kembali, Azure Databricks merekomendasikan penyimpanan data yang dimuat dari file biner ke tabel Delta.
Python
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Scala
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Sumber daya tambahan
- Membaca file gambar: Jika beban kerja Anda memerlukan bidang gambar terstruktur seperti tinggi, lebar, dan data saluran daripada byte mentah, sumber data gambar menyediakan skema yang didekodekan.