Membaca file biner

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'
)

pratinjau gambar

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/*'
)

pratinjau gambar dengan jenis file yang tidak didukung

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.