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.