Azure Databricks'te dosyalarla çalışma
Azure Databricks'te aşağıdaki konumlardaki dosyalarla etkileşime yönelik birden çok yardımcı program ve API vardır:
- Unity Kataloğu birimleri
- Çalışma alanı dosyaları
- Bulut nesne depolaması
- DBFS bağlamaları ve DBFS kökü
- Kümenin sürücü düğümüne bağlı kısa ömürlü depolama
Bu makalede, aşağıdaki araçlar için bu konumlardaki dosyalarla etkileşime yönelik örnekler verilmiştir:
- Apache Spark
- Spark SQL ve Databricks SQL
- Databricks dosya sistemi yardımcı programları (
dbutils.fs
veya%fs
) - Databricks CLI
- Databricks REST API
- Bash kabuk komutları (
%sh
) -
%pip
kullanılarak notebook kapsamlı kitaplık yüklemeleri - Pandalar
- OSS Python dosya yönetimi ve işleme yardımcı programları
Önemli
FUSE veri erişimi gerektiren dosya işlemleri URI'leri kullanarak bulut nesne depolamaya doğrudan erişemez. Databricks, FUSE için bu konumlara erişimi yapılandırmak için Unity Kataloğu birimlerinin kullanılmasını önerir.
Scala, Unity Kataloğu ve paylaşılan erişim modu ile yapılandırılmış işlemdeki Unity Kataloğu birimleri ve çalışma alanı dosyaları için FUSE'yi destekler. Tek kullanıcı erişim modu ve Databricks Runtime 14.3 ve üzeri ile yapılandırılan işlemde Scala, Scala komutu "cat /Volumes/path/to/file".!!
gibi Scala'dan kaynaklanan alt işlemler dışında Unity Kataloğu birimleri ve çalışma alanı dosyaları için FUSE'ı destekler.
Spark ve diğer JVM işlemleri, Unity Kataloğu'nu destekleyen okuyucuları ve yazarları kullanarak yalnızca Unity Kataloğu birimlerine veya çalışma alanı dosyalarına erişebilir. Örneğin, Spark yapılandırmasında bir JAR dosyasını bağımlılık olarak belirtemezsiniz ve PySpark özel veri kaynaklarını kullanamazsınız. Birimlerdeki veya çalışma alanı dosyalarındaki dosyalara erişmesi gereken kitaplıklardan bir JVM iş yükünüz varsa, dosyaları Python veya %sh mv.
gibi kabuk komutlarını kullanarak bilgisayarın yerel depolama alanına kopyalayın. JVM kullanan %fs
veya dbutils.fs
kullanmayın. Küme başlatma sırasında bir dosyanın mevcut olması gerekiyorsa, önce dosyayı taşımak için bir init betiği kullanın. Bkz. Başlatma betikleri nelerdir?.
Azure Databricks'teki veri erişim yolları aşağıdaki standartlardan birini izler:
URI stili yollar bir URI düzeni içerir. Databricks'e özel veri erişim çözümleri için URI düzenleri çoğu kullanım örneğinde isteğe bağlıdır. Bulut nesne depolamadaki verilere doğrudan erişirken, depolama türü için doğru URI düzenini sağlamanız gerekir.
POSIX stili yollar sürücü köküne (
/
) göre veri erişimi sağlar. POSIX stili yollar hiçbir zaman bir düzen gerektirmez. Bulut nesne depolamadaki verilere POSIX stilinde erişim sağlamak için Unity Kataloğu birimlerini veya DBFS bağlamalarını kullanabilirsiniz. Birçok ML çerçevesi ve diğer OSS Python modülleri FUSE gerektirir ve yalnızca POSIX stili yolları kullanabilir.POSIX yolları diyagramı
Databricks, bulut nesne depolama alanında depolanan tablosal olmayan veri dosyalarına erişimi yapılandırmak için Unity Kataloğu birimlerinin kullanılmasını önerir. Bkz. Unity Kataloğu birimleri nedir?.
Alet | Örnek |
---|---|
Apache Spark | spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show() |
Spark SQL ve Databricks SQL | SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`; LIST '/Volumes/my_catalog/my_schema/my_volume/'; |
Databricks dosya sistemi yardımcı programları | dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/") %fs ls /Volumes/my_catalog/my_schema/my_volume/ |
Databricks Komut Satırı Arayüzü (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"}],},...]} |
Bash kabuk dili komutları | %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip |
Kitaplık yüklemeleri | %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl |
Pandalar | df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv') |
Açık Kaynak Yazılım Python | os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory') |
Not
Databricks CLI ile çalışırken dbfs:/
düzeni gereklidir.
Hacimler aşağıdaki sınırlamalara sahiptir:
Zip ve Excel dosyaları yazma gibi doğrudan ekleme veya sıralı olmayan (rastgele) yazma işlemleri desteklenmez. Doğrudan ekleme veya rastgele yazma iş yükleri için, önce yerel diskte işlemleri gerçekleştirin ve ardından sonuçları Unity Kataloğu birimlerine kopyalayın. Mesela:
# 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')
Seyrek dosyalar desteklenmez. Seyrek dosyaları kopyalamak için
cp --sparse=never
kullanın:$ 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
Databricks çalışma alanı dosyaları not defteri olmayan bir çalışma alanında bulunan dosyalardır. Not defterleri ve diğer çalışma alanı varlıklarıyla birlikte kaydedilen verileri ve diğer dosyaları depolamak ve erişmek için çalışma alanı dosyalarını kullanabilirsiniz. Çalışma alanı dosyalarının boyut kısıtlamaları olduğundan Databricks, geliştirme ve test için yalnızca küçük veri dosyalarının burada depolanmasını önerir.
Araç | Örnek |
---|---|
Apache Spark | spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show() |
Spark SQL ve Databricks SQL | SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`; |
Databricks dosya sistemi yardımcı programları | 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"} |
Bash kabuk komutları | %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip |
Kütüphane yüklemeleri | %pip install /Workspace/Users/<user-folder>/my_library.whl |
Pandalar | df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv') |
Açık Kaynak Kodlu Python | os.listdir('/Workspace/Users/<user-folder>/path/to/directory') |
Not
Databricks Yardımcı Programları, Apache Spark veya SQL ile çalışırken file:/
şeması gereklidir.
Çalışma alanı dosyalarıyla çalışmayla ilgili sınırlamalar için bkz. Sınırlamalar.
Çalışma alanı dosyasını silmek, dosyayı çöp kutusuna gönderir. Kullanıcı arabirimini kullanarak çöp sepetindeki dosyaları kurtarabilir veya kalıcı olarak silebilirsiniz.
Bkz. Nesneyi Sil.
Databricks, bulut nesne depolamadaki dosyalara güvenli erişim yapılandırmak için Unity Kataloğu birimlerinin kullanılmasını önerir. URI'leri kullanarak bulut nesne depolamadaki verilere doğrudan erişmeyi seçerseniz izinleri yapılandırmanız gerekir. bkz. Dış konumları, dış tabloları ve dış birimleri yönetme.
Aşağıdaki örneklerde bulut nesne depolamadaki verilere erişmek için URI'ler kullanılır:
Araç | Örnek |
---|---|
Apache Spark | spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show() |
Spark SQL ve 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';
|
Databricks dosya sistemi yardımcı programları |
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 | Desteklenmiyor |
Databricks REST API | Desteklenmiyor |
Bash kabuk komutları | Desteklenmiyor |
Kütüphane kurulumları | %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl |
Pandalar | Desteklenmiyor |
Açık Kaynak Yazılım Python | Desteklenmiyor |
Not
DBFS bağlamaları Unity Kataloğu kullanılarak güvenli hale getirilemez ve artık Databricks tarafından önerilmez. DBFS kökünde depolanan verilere çalışma alanındaki tüm kullanıcılar erişebilir. Databricks, dbfs kökünde hassas veya üretim kodu ya da veri depolamamanızı önerir. Bkz. DBFS nedir?.
Alet | Örnek |
---|---|
Apache Spark | spark.read.format("json").load("/mnt/path/to/data.json").show() |
Spark SQL ve Databricks SQL | SELECT * FROM json.`/mnt/path/to/data.json`; |
Databricks dosya sistemi yardımcı programları | 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" }' |
Bash kabuk komutları | %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip |
Kütüphane yüklemeleri | %pip install /dbfs/mnt/path/to/my_library.whl |
Pandalar | df = pd.read_csv('/dbfs/mnt/path/to/data.csv') |
Açık Kaynak Yazılım Python | os.listdir('/dbfs/mnt/path/to/directory') |
Not
Databricks CLI ile çalışırken dbfs:/
düzeni gereklidir.
Sürücü düğümüne eklenen geçici depolama, yerleşik POSIX tabanlı yol erişimine sahip blok depolamadır. Bir küme sonlandırıldığında veya yeniden başlatıldığında bu konumda depolanan tüm veriler kaybolur.
Araç | Örnek |
---|---|
Apache Spark | Desteklenmiyor |
Spark SQL ve Databricks SQL | Desteklenmiyor |
Databricks dosya sistemi yardımcı programları | dbutils.fs.ls("file:/path") %fs ls file:/path |
Databricks CLI | Desteklenmiyor |
Databricks REST API | Desteklenmiyor |
Bash kabuk komutları | %sh curl http://<address>/text.zip > /tmp/text.zip |
Kütüphane kurulumları | Desteklenmiyor |
Pandalar | df = pd.read_csv('/path/to/data.csv') |
Açık Kaynak Yazılım Python | os.listdir('/path/to/directory') |
Not
Databricks Yardımcı Programları ile çalışırken file:/
şeması gereklidir.
Apache Spark kullanarak kısa ömürlü depolamaya indirilen veya kaydedilen verilere erişmek isteyebilirsiniz. Kısa ömürlü depolama sürücüye eklendiğinden ve Spark dağıtılmış bir işleme altyapısı olduğundan, tüm işlemler verilere buradan doğrudan erişemez. Sürücü dosya sisteminden Unity Kataloğu birimlerine veri taşımanız gerektiğini varsayalım. Bu durumda, aşağıdaki örneklerde gösterildiği gibi
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>
Yerel dosyaları yükleme veya Azure Databricks'e internet dosyaları indirme hakkında bilgi için bkz. Azure Databricks'e dosya yükleme.