Udostępnij za pośrednictwem


Praca z plikami w usłudze Azure Databricks

Usługa Azure Databricks ma wiele narzędzi i interfejsów API do interakcji z plikami w następujących lokalizacjach:

  • Woluminy wykazu aparatu Unity
  • Pliki obszaru roboczego
  • Magazyn obiektów w chmurze
  • Instalacja systemu PLIKÓW DBFS i katalog główny systemu plików DBFS
  • Magazyn efemeryczny dołączony do węzła sterownika klastra

Ten artykuł zawiera przykłady interakcji z plikami w tych lokalizacjach dla następujących narzędzi:

  • Apache Spark
  • Spark SQL i Databricks SQL
  • Narzędzia systemu plików Databricks (dbutils.fs lub %fs)
  • Interfejs wiersza polecenia usługi Databricks
  • Databricks REST API
  • Polecenia powłoki Bash (%sh)
  • Instalowanie bibliotek z zakresem notatnika przy użyciu %pip
  • Pandy
  • Narzędzia do zarządzania i przetwarzania plików open source w Pythonie

Ważny

Operacje na plikach wymagające dostępu do danych FUSE nie mogą uzyskiwać bezpośredniego dostępu do magazynu obiektów w chmurze przy użyciu identyfikatorów URI. Usługa Databricks zaleca używanie woluminów kataloga Unity do konfiguracji dostępu do tych lokalizacji przez FUSE.

Język Scala obsługuje FUSE dla woluminów Unity Catalog i plików roboczych na komputerach skonfigurowanych z Unity Catalog i w trybie dostępu współdzielonego. W przypadku obliczeń skonfigurowanych w trybie dostępu pojedynczego użytkownika, w środowisku Databricks Runtime 14.3 lub nowszym, język Scala obsługuje FUSE dla woluminów Unity Catalog i plików obszarów roboczych, z wyjątkiem podprocesów pochodzących z języka Scala, takich jak polecenie Scala "cat /Volumes/path/to/file".!!.

Proces Spark i inne procesy JVM mogą uzyskiwać dostęp tylko do woluminów Unity Catalog lub plików przestrzeni roboczych przy użyciu czytników i zapisujących obsługujących Unity Catalog. Na przykład nie można określić pliku JAR jako zależności w konfiguracji platformy Spark i nie można użyć niestandardowych źródeł danych PySpark. Jeśli masz obciążenie JVM z bibliotek, które muszą uzyskiwać dostęp do plików w woluminach lub w plikach roboczych, skopiuj te pliki do lokalnej pamięci maszynowej używając języka Python lub poleceń powłoki, takich jak %sh mv.. Nie używaj %fs ani dbutils.fs, które wykorzystują JVM. Jeśli plik musi być obecny podczas uruchamiania klastra, użyj skryptu inicjowania, aby najpierw przenieść plik. Zobacz Czym są skrypty init?.

Czy muszę podać schemat identyfikatora URI, aby uzyskać dostęp do danych?

Ścieżki dostępu do danych w usłudze Azure Databricks są zgodne z jednym z następujących standardów:

  • ścieżki stylu identyfikatora URI obejmują schemat identyfikatora URI. W przypadku rozwiązań dostępu do danych natywnych dla usługi Databricks schematy identyfikatorów URI są opcjonalne w większości przypadków użycia. W przypadku bezpośredniego uzyskiwania dostępu do danych w magazynie obiektów w chmurze należy podać prawidłowy schemat identyfikatora URI dla typu magazynu.

    diagram ścieżek identyfikatora URI

  • ścieżki w stylu POSIX zapewniają dostęp do danych względem katalogu głównego dysku sterownika (/). Ścieżki stylu POSIX nigdy nie wymagają schematu. Za pomocą woluminów Unity Catalog lub zamocowań DBFS można zapewnić dostęp zgodny z POSIX do danych w chmurowej pamięci obiektowej. Wiele frameworków uczenia maszynowego i innych modułów open-source Pythona wymaga FUSE i mogą używać tylko ścieżek w stylu POSIX.

    diagram ścieżek POSIX

Praca z plikami w woluminach Unity Catalog

Databricks zaleca używanie woluminów Unity Catalog do konfigurowania dostępu do plików danych innych niż tabelaryczne przechowywanych w chmurowym magazynie obiektów. Zobacz Czym są wolumeny Unity Catalog?.

Narzędzie Przykład
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL i Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Narzędzia do systemu plików Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
Interfejs wiersza polecenia usługi Databricks 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"}],},...]}
Polecenia powłoki Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Instalacje biblioteki %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandy df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
System operacyjny Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Notatka

Schemat dbfs:/ jest wymagany podczas pracy z interfejsem wiersza polecenia usługi Databricks.

Ograniczenia woluminów

Woluminy mają następujące ograniczenia:

  • Zapisy bezpośrednie lub niesekwencyjne (losowe), takie jak zapisywanie plików Zip i Excel, nie są obsługiwane. W przypadku obciążeń związanych z bezpośrednim dołączaniem lub losowym zapisem najpierw wykonaj operacje na dysku lokalnym, a następnie skopiuj wyniki do woluminów Unity Catalog. Na przykład:

    # 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')
    
  • Pliki rzadkie nie są obsługiwane. Aby skopiować rzadkie pliki, użyj 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
    

Praca z plikami przestrzeni roboczej

Pliki w obszarze roboczym usługi Databricks to pliki znajdujące się w obszarze roboczym. Pliki obszaru roboczego umożliwiają przechowywanie i uzyskiwanie dostępu do plików, takich jak notesy, pliki kodu źródłowego, pliki danych i inne zasoby obszaru roboczego. Ponieważ pliki w obszarze roboczym mają ograniczenia rozmiaru, usługa Databricks zaleca przechowywanie tutaj tylko małych plików, głównie na potrzeby rozwoju i testowania.

Narzędzie Przykład
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL i Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Narzędzia do systemu plików Databricks dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
Interfejs wiersza polecenia usługi Databricks databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Polecenia powłoki Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Instalacje biblioteki %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandy df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
System operacyjny Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Notatka

Schemat file:/ jest wymagany podczas pracy z Narzędziami Databricks, Apache Spark lub SQL.

W celu zapoznania się z ograniczeniami dotyczącymi pracy z plikami obszarów roboczych, zobacz Ograniczenia.

Dokąd trafiają usunięte pliki z obszaru roboczego?

Usunięcie pliku z obszaru roboczego powoduje wysłanie go do kosza. Możesz odzyskać lub trwale usunąć pliki z kosza przy użyciu interfejsu użytkownika.

Zobacz Usuwanie obiektu.

Praca z plikami w magazynie obiektów w chmurze

Databricks zaleca używanie woluminów w Unity Catalog do konfigurowania bezpiecznego dostępu do plików w magazynie obiektów w chmurze. Jeśli zdecydujesz się na bezpośredni dostęp do danych w magazynie obiektów w chmurze przy użyciu identyfikatorów URI, musisz skonfigurować uprawnienia. Zobacz Zarządzanie lokalizacjami zewnętrznymi, tabelami zewnętrznymi i woluminami zewnętrznymi.

W poniższych przykładach używane są identyfikatory URI do uzyskiwania dostępu do danych w magazynie obiektów w chmurze:

Narzędzie Przykład
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL i 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';
Narzędzia do systemu plików 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/
Interfejs wiersza polecenia usługi Databricks Nieobsługiwane
Databricks REST API Nieobsługiwane
Polecenia powłoki Bash Nieobsługiwane
Instalacje biblioteki %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandy Nieobsługiwane
System operacyjny Python Nieobsługiwane

Notatka

Praca z plikami w instalacjach systemu plików DBFS i katalogu głównym systemu plików DBFS

Montowanie DBFS nie można zabezpieczyć przy użyciu Unity Catalog i nie jest już zalecane przez Databricks. Dane przechowywane w katalogu głównym systemu plików DBFS są dostępne dla wszystkich użytkowników w obszarze roboczym. Usługa Databricks odradza przechowywanie jakiegokolwiek poufnego lub produkcyjnego kodu lub danych w katalogu głównym systemu plików DBFS. Zobacz Co to jest system DBFS?.

Narzędzie Przykład
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL i Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Narzędzia do systemu plików Databricks dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
Interfejs wiersza polecenia usługi Databricks 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" }'
Polecenia powłoki Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Instalacje biblioteki %pip install /dbfs/mnt/path/to/my_library.whl
Pandy df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
System operacyjny Python os.listdir('/dbfs/mnt/path/to/directory')

Notatka

Schemat dbfs:/ jest wymagany podczas pracy z interfejsem wiersza polecenia usługi Databricks.

Praca z plikami w przechowalni efemerycznej dołączonej do węzła sterownika

Tymczasowa pamięć masowa dołączona do węzła sterownika to pamięć blokowa z wbudowanym dostępem do ścieżki opartej na systemie POSIX. Wszystkie dane przechowywane w tej lokalizacji znikają po zakończeniu lub ponownym uruchomieniu klastra.

Narzędzie Przykład
Apache Spark Nieobsługiwane
Spark SQL i Databricks SQL Nieobsługiwane
Narzędzia do systemu plików Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Interfejs wiersza polecenia usługi Databricks Nieobsługiwane
Databricks REST API Nieobsługiwane
Polecenia powłoki Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Instalacje biblioteki Nieobsługiwane
Pandy df = pd.read_csv('/path/to/data.csv')
System operacyjny Python os.listdir('/path/to/directory')

Notatka

Schemat file:/ jest wymagany podczas pracy z narzędziami usługi Databricks.

Przenoszenie danych z magazynu efemerycznego do woluminów

Możesz chcieć uzyskać dostęp do danych pobranych lub zapisanych w magazynie efemerycznym przy użyciu platformy Apache Spark. Nie wszystkie operacje mogą bezpośrednio uzyskiwać tutaj dostępu do danych, ponieważ pamięć efemeryczna jest dołączona do sterownika, a platforma Spark jest silnikiem przetwarzania rozproszonego. Załóżmy, że musisz przenieść dane z systemu plików kierowcy do woluminów Unity Catalog. W takim przypadku można kopiować pliki przy użyciu poleceń magicznych lub narzędzi Databricks , jak w następujących przykładach:

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>

Dodatkowe zasoby

Aby uzyskać informacje na temat przekazywania plików lokalnych lub pobierania plików internetowych do usługi Azure Databricks, zobacz Upload files to Azure Databricks.