Gambar

Penting

Databricks merekomendasikan agar Anda menggunakan sumber data file biner untuk memuat data gambar ke Spark DataFrame sebagai byte mentah. Lihat Solusi referensi untuk aplikasi gambar untuk alur kerja yang direkomendasikan untuk menangani data gambar.

Sumber data gambar mengabstraksi dari detail representasi gambar dan menyediakan API standar untuk memuat data gambar. Untuk membaca file gambar, tentukan sumber data format sebagai image.

df = spark.read.format("image").load("<path-to-image-data>")

API serupa ada untuk Scala, Java, dan R.

Anda dapat mengimpor struktur direktori berlapis (misalnya, menggunakan jalur seperti /path/to/dir/) dan Anda dapat menggunakan penemuan partisi dengan menentukan jalur dengan direktori partisi (yaitu, jalur seperti /path/to/dir/date=2018-01-02/category=automobile).

Struktur gambar

File gambar dimuat sebagai DataFrame yang berisi satu kolom jenis struct yang disebut image dengan bidang berikut:

image: struct containing all the image data
  |-- origin: string representing the source URI
  |-- height: integer, image height in pixels
  |-- width: integer, image width in pixels
  |-- nChannels
  |-- mode
  |-- data

di mana letak bidang-bidangnya

  • nChannels: Jumlah saluran warna. Nilai umumnya adalah 1 untuk gambar skala abu-abu, 3 untuk gambar berwarna (misalnya, RGB), dan 4 untuk gambar berwarna dengan saluran alfa.

  • mode: Bendera bidang bulat yang menunjukkan cara menginterpretasikan bidang data. Ini menentukan jenis data dan urutan saluran data yang disimpan. Nilai bidang diharapkan sesuai dengan salah satu jenis OpenCV yang ditampilkan dalam tabel berikut, namun tidak wajib. Jenis OpenCV ditentukan untuk 1, 2, 3, atau 4 saluran dan beberapa jenis data untuk nilai piksel. Pesanan saluran menentukan urutan di mana warna disimpan. Misalnya, jika Anda memiliki gambar tiga saluran yang khas dengan komponen merah, biru, dan hijau, ada enam kemungkinan pemesanan. Sebagian besar pustaka menggunakan RGB atau BGR. Tiga (empat) jenis saluran OpenCV diharapkan berada dalam urutan BGR (A).

    Peta Tipe ke Angka di OpenCV (tipe data x jumlah saluran)

Jenis C1 C2 C3 C4
CV_8U 0 8 16 24
CV_8S 1 9 17 25
CV_16U 2 10 18 26
CV_16S 3 11 19 27
CV_32U 4 12 20 28
CV_32S 5 13 21 29
CV_64F 6 14 22 30
  • data: Data gambar disimpan dalam format biner. Data gambar direpresentasikan sebagai array 3 dimensi dengan bentuk dimensi (tinggi, lebar, nChannels) dan nilai array jenis t yang ditentukan oleh bidang mode. Larik disimpan dalam urutan baris-mayor.

Menampilkan data gambar

Databricks display berfungsi menampilkan data gambar. Lihat Gambar.

Contoh buku catatan: Membaca dan menulis data ke file gambar

Buku catatan berikut menunjukkan cara membaca dan menulis data ke file gambar.

Buku catatan sumber data gambar

Ambil buku catatan

Keterbatasan sumber data gambar

Sumber data gambar memecahkan kode file gambar selama pembuatan Spark DataFrame, meningkatkan ukuran data, dan memperkenalkan batasan dalam skenario berikut:

  1. Mempertahankan DataFrame: Jika Anda ingin mempertahankan DataFrame ke dalam tabel Delta untuk akses yang lebih mudah, Anda harus mempertahankan byte mentah alih-alih data yang didekode untuk menghemat ruang disk.
  2. Menyeret partisi: Mengocok data gambar yang diterjemahkan membutuhkan lebih banyak ruang disk dan bandwidth jaringan, yang menghasilkan pengocokan yang lebih lambat. Anda harus menunda decoding gambar sebanyak mungkin.
  3. Memilih metode decoding lain: Sumber data gambar menggunakan pustaka Image IO javax untuk memecahkan kode gambar, yang mencegah Anda memilih pustaka decoding gambar lain untuk kinerja yang lebih baik atau menerapkan logika decoding yang disesuaikan.

Keterbatasan tersebut dapat dihindari dengan menggunakan sumber data file biner untuk memuat data gambar dan decoding hanya sesuai kebutuhan.