Bagikan melalui


File biner

Databricks Runtime mendukung sumber data file biner, yang membaca file biner dan mengonversi setiap file menjadi satu catatan yang berisi konten mentah dan metadata file. Sumber data file biner menghasilkan DataFrame dengan kolom berikut dan mungkin kolom partisi:

  • path (StringType): Jalur 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 file.

Untuk membaca file biner, tentukan sumber data format sebagai binaryFile.

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:

df = spark.read.format("binaryFile").load("<path-to-image-dir>")
display(df)    # image thumbnails are rendered in the "content" column

image preview

Kalau tidak, Anda dapat memaksa fungsi pratinjau gambar dengan menggunakan opsi mimeType dengan nilai string "image/*" untuk membubuhi catatan 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.

df = spark.read.format("binaryFile").option("mimeType", "image/*").load("<path-to-dir>")
display(df)    # unsupported files are displayed as a broken image icon

image preview with unsupported file type

Lihat Solusi referensi untuk aplikasi gambar untuk alur kerja yang direkomendasikan untuk menangani data gambar.

Opsi

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:

df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("<path-to-dir>")

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:

df = spark.read.format("binaryFile") \
  .option("pathGlobFilter", "*.jpg") \
  .option("recursiveFileLookup", "true") \
  .load("<path-to-dir>")

API serupa ada untuk Scala, Java, dan R.

Catatan

Untuk meningkatkan kinerja baca saat Anda memuat kembali data, Azure Databricks merekomendasikan untuk mematikan kompresi saat Anda menyimpan data yang dimuat dari file biner:

spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")
df.write.format("delta").save("<path-to-table>")