Praca z plikami w usłudze Azure Databricks

Usługa Azure Databricks udostępnia 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
  • Utitlities systemu plików usługi Databricks (dbutils.fs lub %fs)
  • Interfejs wiersza polecenia usługi Databricks
  • Interfejs API REST usługi Databricks
  • Polecenia powłoki Bash (%sh)
  • Instalowanie biblioteki o zakresie notesu przy użyciu polecenia %pip
  • Pandy
  • Narzędzia do zarządzania plikami i przetwarzania plików systemu operacyjnego Python

Ważne

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

Język Scala nie obsługuje programu FUSE dla woluminów wykazu aparatu Unity ani plików obszarów roboczych w obliczeniach skonfigurowanych z trybem dostępu pojedynczego użytkownika lub klastrami bez wykazu aparatu Unity. Język Scala obsługuje woluminy wykazu aparatu Unity i pliki obszarów roboczych w obliczeniach skonfigurowanych przy użyciu wykazu aparatu Unity i trybu dostępu współdzielonego.

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 zawierają 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 stylu POSIX zapewniają dostęp do danych względem katalogu głównego sterownika (/). Ścieżki stylu POSIX nigdy nie wymagają schematu. Za pomocą woluminów wykazu aparatu Unity lub instalacji systemu plików DBFS można zapewnić dostęp w stylu POSIX do danych w magazynie obiektów w chmurze. Wiele struktur uczenia maszynowego i innych modułów języka Python systemu operacyjnego wymaga programu FUSE i może używać tylko ścieżek w stylu POSIX.

    Diagram ścieżek POSIX

Praca z plikami w woluminach wykazu aparatu Unity

Usługa Databricks zaleca używanie woluminów wykazu aparatu Unity do konfigurowania dostępu do plików danych innych niż tabelaryczne przechowywane w magazynie obiektów w chmurze. Zobacz Tworzenie woluminów i praca z nimi.

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 systemu plików usługi 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/
Interfejs API REST usługi Databricks 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')

Uwaga

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ń bezpośredniego dołączania lub losowego zapisu najpierw wykonaj operacje na dysku lokalnym, a następnie skopiuj wyniki do woluminów wykazu aparatu Unity. 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 rozrzedłe nie są obsługiwane. Aby skopiować pliki rozrzedłe, użyj polecenia 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 obszaru roboczego

Pliki obszaru roboczego usługi Databricks to zestaw plików w obszarze roboczym, który nie jest notesem. Za pomocą plików obszaru roboczego można przechowywać dane i inne pliki zapisane obok notesów i innych zasobów obszaru roboczego oraz uzyskiwać do nich dostęp. Ponieważ pliki obszarów roboczych mają ograniczenia rozmiaru, usługa Databricks zaleca przechowywanie tylko małych plików danych w tym miejscu głównie na potrzeby programowania 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 systemu plików usługi 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
Interfejs API REST usługi Databricks 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')

Uwaga

Schemat file:/ jest wymagany podczas pracy z narzędziami usługi Databricks, Apache Spark lub SQL.

Ograniczenia plików obszaru roboczego

Pliki obszaru roboczego mają następujące ograniczenia:

  • Rozmiar pliku obszaru roboczego jest ograniczony do 500 MB z interfejsu użytkownika. Maksymalny rozmiar pliku dozwolony podczas zapisywania z klastra wynosi 256 MB.

  • Jeśli przepływ pracy używa kodu źródłowego znajdującego się w zdalnym repozytorium Git, nie można zapisać w bieżącym katalogu ani zapisać przy użyciu ścieżki względnej. Zapisywanie danych w innych opcjach lokalizacji.

  • Nie można używać git poleceń podczas zapisywania w plikach obszaru roboczego. Tworzenie katalogów .git nie jest dozwolone w plikach obszaru roboczego.

  • Istnieje ograniczona obsługa operacji na plikach obszaru roboczego z zasobów obliczeniowych bezserwerowych.

  • Funkcje wykonawcze nie mogą zapisywać w plikach obszaru roboczego.

  • Symlinki nie są obsługiwane.

  • Nie można uzyskać dostępu do plików obszaru roboczego z funkcji zdefiniowanych przez użytkownika (UDF) w klastrach z trybem dostępu współdzielonego.

Gdzie są usuwane pliki obszaru roboczego?

Usunięcie pliku 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

Usługa Databricks zaleca używanie woluminów wykazu aparatu Unity 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 systemu plików usługi 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
Interfejs API REST usługi Databricks 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

Uwaga

Magazyn obiektów w chmurze nie obsługuje przekazywania poświadczeń.

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

Instalacja systemu PLIKÓW DBFS nie jest zabezpieczana przy użyciu wykazu aparatu Unity i nie jest już zalecana przez usługę 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 zaleca przechowywanie wszelkich poufnych lub produkcyjnych kodu lub danych w katalogu głównym systemu plików DBFS. Zobacz Co to jest system plików usługi Databricks (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 systemu plików usługi 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
Interfejs API REST usługi Databricks 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')

Uwaga

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

Praca z plikami w magazynie efemerycznym dołączonym do węzła sterownika

Magazyn szyfralny dołączony do węzła sterownika to magazyn blokowy z natywnym 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 systemu plików usługi Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
Interfejs wiersza polecenia usługi Databricks Nieobsługiwane
Interfejs API REST usługi Databricks 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')

Uwaga

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. Ponieważ magazyn efemeryczny jest dołączony do sterownika, a platforma Spark jest aparatem przetwarzania rozproszonego, nie wszystkie operacje mogą bezpośrednio uzyskiwać dostęp do danych tutaj. Jeśli musisz przenieść dane z systemu plików sterowników do woluminów wykazu aparatu Unity, możesz skopiować pliki przy użyciu poleceń magic lub narzędzi usługi 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>