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 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
  • Pandas
  • Narzędzia do zarządzania plikami i przetwarzania plików systemu operacyjnego Python

Ważne

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 wykazu aparatu Unity do konfigurowania dostępu do tych lokalizacji dla programu FUSE.

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. W przypadku obliczeń skonfigurowanych przy użyciu trybu dostępu pojedynczego użytkownika i środowiska Databricks Runtime 14.3 lub nowszego język Scala obsługuje program FUSE dla woluminów wykazu aparatu Unity i plików obszarów roboczych, z wyjątkiem podprocesów pochodzących z języka Scala, takich jak polecenie "cat /Volumes/path/to/file".!!Scala.

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 Co to są woluminy wykazu aparatu Unity?.

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 pliki 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.

  • Odczytywanie z plików obszaru roboczego przy użyciu funkcji wykonawczych platformy Spark (takich jak spark.read.format("csv").load("file:/Workspace/Users/<user-folder>/data.csv")) nie jest obsługiwane w przypadku obliczeń 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 w środowisku Databricks Runtime 14.2 lub nowszym.

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 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 efemeryczny dołączony do węzła sterownika to magazyn blokowy 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 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. Załóżmy, że musisz przenieść dane z systemu plików sterownika do woluminów wykazu aparatu Unity. W takim przypadku można kopiować 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>

Dodatkowe zasoby

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