Bagikan melalui


Bekerja dengan file di Azure Databricks

Azure Databricks memiliki beberapa utilitas dan API untuk berinteraksi dengan file di lokasi berikut:

  • Volume Katalog Unity
  • File ruang kerja
  • Penyimpanan objek awan
  • Pemasangan DBFS dan akar DBFS
  • Penyimpanan sementara yang terpasang pada simpul penggerak kluster

Artikel ini memiliki contoh untuk berinteraksi dengan file di lokasi ini untuk alat berikut:

  • Apache Spark
  • Spark SQL dan Databricks SQL
  • Utilitas sistem file Databricks (dbutils.fs atau %fs)
  • Databricks CLI
  • Databricks REST API
  • Perintah shell Bash (%sh)
  • Penginstalan pustaka dengan cakupan notebook menggunakan %pip
  • Panda
  • Utilitas manajemen dan pemrosesan file OSS Python

Penting

Operasi file yang memerlukan akses data FUSE tidak dapat langsung mengakses penyimpanan objek cloud menggunakan URI. Databricks merekomendasikan penggunaan volume Unity Catalog untuk mengonfigurasi akses ke lokasi ini untuk FUSE.

Scala mendukung FUSE untuk volume pada Unity Catalog dan file pada ruang kerja di komputer yang dikonfigurasi dengan Unity Catalog dan dalam mode akses terdedikasi (sebelumnya dikenal sebagai mode akses bersama). Pada komputasi yang dikonfigurasi dengan mode akses khusus (sebelumnya mode akses pengguna tunggal) dan Databricks Runtime 14.3 ke atas, Scala mendukung FUSE untuk volume Katalog Unity dan file ruang kerja, kecuali untuk subproses yang berasal dari Scala, seperti perintah Scala "cat /Volumes/path/to/file".!!.

Spark dan proses JVM lainnya hanya dapat mengakses volume Katalog Unity atau file ruang kerja menggunakan pembaca dan penulis yang mendukung Katalog Unity. Misalnya, Anda tidak dapat menentukan file JAR sebagai dependensi dalam konfigurasi Spark, dan Anda tidak dapat menggunakan sumber data kustom PySpark. Jika Anda memiliki workload JVM dari pustaka yang perlu mengakses file dalam volume atau file di ruang kerja, salin file tersebut ke penyimpanan lokal komputer menggunakan perintah Python atau shell seperti %sh mv.. Jangan gunakan %fs atau dbutils.fs yang menggunakan JVM. Jika file perlu ada selama mulai kluster, gunakan skrip init untuk memindahkan file terlebih dahulu. Lihat Apa itu skrip init?.

Apakah saya perlu menyediakan skema URI untuk mengakses data?

Jalur akses data di Azure Databricks mengikuti salah satu standar berikut:

  • jalur gaya URI menyertakan skema URI. Untuk solusi akses data asli Databricks, skema URI bersifat opsional untuk sebagian besar kasus penggunaan. Saat langsung mengakses data di penyimpanan objek cloud, Anda harus menyediakan skema URI yang benar untuk jenis penyimpanan.

    diagram jalur URI

  • jalur berformat POSIX menyediakan akses data yang relatif terhadap akar driver (/). Jalur bergaya POSIX tidak pernah memerlukan skema. Anda dapat menggunakan volume Unity Catalog atau mount DBFS untuk menyediakan akses bergaya POSIX ke data di penyimpanan objek cloud. Banyak kerangka kerja ML dan modul OSS Python lainnya memerlukan FUSE dan hanya dapat menggunakan jalur bergaya POSIX.

    diagram jalur-jalur POSIX

Bekerja dengan file dalam volume Katalog Unity

Databricks merekomendasikan penggunaan volume Unity Catalog untuk mengonfigurasi akses ke file data non-tabular yang disimpan di penyimpanan objek cloud. Lihat Apa itu Unity Catalog volumes?.

Alat Contoh
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL dan Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Utilitas sistem file Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Databricks CLI databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
Databricks REST API POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Perintah shell Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Instalasi perpustakaan %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Panda df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
Perangkat Lunak Sumber Terbuka Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Nota

Skema dbfs:/ diperlukan saat bekerja dengan Databricks CLI.

Batasan volume

Volume memiliki batasan berikut:

  • Penulisan direct-append atau non-sequential (acak), seperti menulis file Zip dan Excel tidak didukung. Untuk beban kerja direct-append atau random-write, lakukan operasi pada disk lokal terlebih dahulu lalu salin hasilnya ke volume Unity Catalog. Misalnya:

    # python
    import xlsxwriter
    from shutil import copyfile
    
    workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, "Key")
    worksheet.write(0, 1, "Value")
    workbook.close()
    
    copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
    
  • File sparse tidak didukung. Untuk menyalin file jarang, gunakan cp --sparse=never:

    $ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    

Bekerja dengan file ruang kerja

Databricks file-file ruang kerja merupakan file yang ada di ruang kerja, disimpan di akun penyimpanan untuk ruang kerja . Anda dapat menggunakan file ruang kerja untuk menyimpan dan mengakses file seperti notebook, file kode sumber, file data, dan aset ruang kerja lainnya. Karena file ruang kerja memiliki batasan ukuran, Databricks merekomendasikan hanya menyimpan file data kecil di sini terutama untuk pengembangan dan pengujian.

Alat Contoh
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL dan Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Utilitas sistem file Databricks dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Databricks CLI databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Perintah shell Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Instalasi perpustakaan %pip install /Workspace/Users/<user-folder>/my_library.whl
Panda df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
Perangkat Lunak Sumber Terbuka Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Nota

Skema file:/ diperlukan saat bekerja dengan Utilitas Databricks, Apache Spark, atau SQL.

Untuk batasan dalam bekerja dengan file ruang kerja, lihat Batasan.

Ke mana file ruang kerja yang dihapus pergi?

Menghapus file dari ruang kerja akan memindahkannya ke tong sampah. Anda dapat memulihkan atau menghapus file secara permanen dari tempat sampah menggunakan UI.

Lihat Menghapus objek.

Bekerja dengan file di penyimpanan objek cloud

Databricks merekomendasikan penggunaan volume Unity Catalog untuk mengonfigurasi akses aman ke file di penyimpanan objek cloud. Anda harus mengonfigurasi izin jika Anda memilih untuk langsung mengakses data di penyimpanan objek cloud menggunakan URI. Lihat Mengelola lokasi eksternal, tabel eksternal, dan volume eksternal.

Contoh berikut menggunakan URI untuk mengakses data di penyimpanan objek cloud:

Alat Contoh
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL dan Databricks SQL SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`; LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path';
Utilitas sistem file Databricks dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/") %fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/
Databricks CLI Tidak didukung
Databricks REST API Tidak didukung
Perintah shell Bash Tidak didukung
Instalasi perpustakaan %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Panda Tidak didukung
Perangkat Lunak Sumber Terbuka Python Tidak didukung

Bekerja dengan file di mount DBFS dan root DBFS

Pemasangan DBFS tidak dapat diamankan menggunakan Unity Catalog dan tidak lagi direkomendasikan oleh Databricks. Data yang disimpan di akar DBFS dapat diakses oleh semua pengguna di ruang kerja. Databricks merekomendasikan untuk tidak menyimpan kode atau data sensitif atau produksi apa pun di akar DBFS. Lihat Apa itu DBFS?.

Alat Contoh
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL dan Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Utilitas sistem file Databricks dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Databricks CLI databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
Databricks REST API POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Perintah shell Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Instalasi perpustakaan %pip install /dbfs/mnt/path/to/my_library.whl
Panda df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
Perangkat Lunak Sumber Terbuka Python os.listdir('/dbfs/mnt/path/to/directory')

Nota

Skema dbfs:/ diperlukan saat bekerja dengan Databricks CLI.

Bekerja dengan file dalam penyimpanan sementara yang terpasang pada simpul driver

Penyimpanan ephemeral yang terpasang pada simpul driver adalah penyimpanan blok dengan akses jalur berbasis POSIX bawaan. Setiap data yang disimpan di lokasi ini menghilang ketika kluster berakhir atau dimulai ulang.

Alat Contoh
Apache Spark Tidak didukung
Spark SQL dan Databricks SQL Tidak didukung
Utilitas sistem file Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks CLI Tidak didukung
Databricks REST API Tidak didukung
Perintah shell Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Instalasi di perpustakaan Tidak didukung
Panda df = pd.read_csv('/path/to/data.csv')
Perangkat Lunak Sumber Terbuka Python os.listdir('/path/to/directory')

Nota

Skema file:/ diperlukan saat bekerja dengan Utilitas Databricks.

Memindahkan data dari penyimpanan ephemeral ke volume

Anda mungkin ingin mengakses data yang diunduh atau disimpan ke penyimpanan ephemeral menggunakan Apache Spark. Karena penyimpanan ephemeral melekat pada driver dan Spark adalah mesin pemrosesan terdistribusi, tidak semua operasi dapat langsung mengakses data di sini. Misalkan Anda harus memindahkan data dari sistem file driver ke volume Unity Catalog. Dalam hal ini, Anda dapat menyalin file menggunakan perintah ajaib atau utilitas Databricks, seperti dalam contoh berikut:

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>

Sumber daya tambahan

Untuk informasi tentang mengunggah file lokal atau mengunduh file internet ke Azure Databricks, lihat Mengunggah file ke Azure Databricks.