Azure Databricks에서 파일 작업

Azure Databricks는 다음 위치에 있는 파일과 상호 작용하기 위한 여러 유틸리티 및 API를 제공합니다.

  • Unity 카탈로그 볼륨
  • 작업 영역 파일
  • 클라우드 개체 스토리지
  • DBFS 탑재 및 DBFS 루트
  • 클러스터의 드라이버 노드에 연결된 임시 스토리지

이 문서에서는 다음 도구에 대해 이러한 위치의 파일과 상호 작용하는 예제를 제공합니다.

  • Apache Spark
  • Spark SQL 및 Databricks SQL
  • Databricks 파일 시스템 utitlities (dbutils.fs 또는 %fs)
  • Databricks CLI
  • Databricks REST API
  • Bash 셸 명령(%sh)
  • Notebook 범위 라이브러리를 사용하여 설치 %pip
  • Pandas
  • OSS Python 파일 관리 및 처리 유틸리티

Important

데이터에 대한 FUSE 액세스가 필요한 파일 작업은 URI를 사용하여 클라우드 개체 스토리지에 직접 액세스할 수 없습니다. Databricks는 Unity 카탈로그 볼륨을 사용하여 FUSE에 대한 이러한 위치에 대한 액세스를 구성하는 것이 좋습니다.

Scala는 Unity 카탈로그가 없는 단일 사용자 액세스 모드 또는 클러스터로 구성된 컴퓨팅의 Unity 카탈로그 볼륨 또는 작업 영역 파일에 대한 FUSE를 지원하지 않습니다. Scala는 Unity 카탈로그 및 공유 액세스 모드로 구성된 컴퓨팅에서 Unity 카탈로그 볼륨 및 작업 영역 파일에 대한 FUSE를 지원합니다.

데이터에 액세스하기 위해 URI 체계를 제공해야 하나요?

Azure Databricks의 데이터 액세스 경로는 다음 표준 중 하나를 따릅니다.

  • URI 스타일 경로에는 URI 구성표가 포함됩니다. Databricks 네이티브 데이터 액세스 솔루션의 경우 대부분의 사용 사례에서 URI 체계는 선택 사항입니다. 클라우드 개체 스토리지의 데이터에 직접 액세스하는 경우 스토리지 유형에 대한 올바른 URI 체계를 제공해야 합니다.

    URI 경로 다이어그램

  • POSIX 스타일 경로는 드라이버 루트(/)를 기준으로 데이터 액세스를 제공합니다. POSIX 스타일 경로에는 체계가 필요하지 않습니다. Unity 카탈로그 볼륨 또는 DBFS 탑재를 사용하여 클라우드 개체 스토리지의 데이터에 POSIX 스타일 액세스를 제공할 수 있습니다. 많은 ML 프레임워크 및 기타 OSS Python 모듈에는 FUSE가 필요하며 POSIX 스타일 경로만 사용할 수 있습니다.

    POSIX 경로 다이어그램

Unity 카탈로그 볼륨의 파일 작업

Databricks는 Unity 카탈로그 볼륨을 사용하여 클라우드 개체 스토리지에 저장된 테이블 형식이 아닌 데이터 파일에 대한 액세스를 구성하는 것이 좋습니다. 볼륨 만들기 및 작업을 참조 하세요.

도구 예시
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL 및 Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
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"}],},...]}
Bash 셸 명령 %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
라이브러리 설치 %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandas df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
OSS Python os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

참고 항목

dbfs:/ Databricks CLI를 사용하는 경우 스키마가 필요합니다.

볼륨 제한 사항

볼륨에는 다음과 같은 제한 사항이 있습니다.

  • Zip 및 Excel 파일 작성과 같은 직접 추가 또는 비순차적(임의) 쓰기는 지원되지 않습니다. 직접 추가 또는 임의 쓰기 워크로드의 경우 먼저 로컬 디스크에서 작업을 수행한 다음, 결과를 Unity 카탈로그 볼륨에 복사합니다. 예시:

    # 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')
    
  • 스파스 파일은 지원되지 않습니다. 스파스 파일을 복사하려면 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
    

작업 영역 파일 작업

Databricks 작업 영역 파일 은 Notebook이 아닌 작업 영역의 파일 집합입니다. 작업 영역 파일을 사용하여 Notebook 및 기타 작업 영역 자산과 함께 저장된 데이터 및 기타 파일을 저장하고 액세스할 수 있습니다. 작업 영역 파일에는 크기 제한이 있으므로 Databricks는 주로 개발 및 테스트를 위해 여기에 작은 데이터 파일만 저장하는 것이 좋습니다.

도구 예시
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL 및 Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
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"}
Bash 셸 명령 %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
라이브러리 설치 %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandas df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
OSS Python os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

참고 항목

file:/ Databricks 유틸리티, Apache Spark 또는 SQL로 작업할 때 스키마가 필요합니다.

작업 영역 파일 제한 사항

작업 영역 파일에는 다음과 같은 제한 사항이 있습니다.

  • 작업 영역 파일 크기는 UI에서 500MB로 제한됩니다. 클러스터에서 쓸 때 허용되는 최대 파일 크기는 256MB입니다.

  • 워크플로에서 원격 Git 리포지토리에 있는 소스 코드를 사용하는 경우 현재 디렉터리에 쓰거나 상대 경로를 사용하여 쓸 수 없습니다. 다른 위치 옵션에 데이터를 씁니다.

  • 작업 영역 파일에 저장할 때는 명령을 사용할 git 수 없습니다. 작업 영역 파일에서는 디렉터리를 만들 .git 수 없습니다.

  • 서버리스 컴퓨팅에서 작업 영역 파일 작업에 대한 지원은 제한적입니다.

  • 실행기는 작업 영역 파일에 쓸 수 없습니다.

  • symlinks는 지원되지 않습니다.

  • 공유 액세스 모드를 사용하는 클러스터의 UDF(사용자 정의 함수)에서 작업 영역 파일에 액세스할 수 없습니다.

삭제된 작업 영역 파일은 어디로 이동합니까?

작업 영역 파일을 삭제하면 휴지통으로 전송됩니다. UI를 사용하여 휴지통에서 파일을 복구하거나 영구적으로 삭제할 수 있습니다.

개체 삭제를 참조하세요.

클라우드 개체 스토리지의 파일 작업

Databricks는 Unity 카탈로그 볼륨을 사용하여 클라우드 개체 스토리지의 파일에 대한 보안 액세스를 구성하는 것이 좋습니다. URI를 사용하여 클라우드 개체 스토리지의 데이터에 직접 액세스하도록 선택하는 경우 권한을 구성해야 합니다. 외부 위치, 외부 테이블 및 외부 볼륨 관리를 참조 하세요.

다음 예제에서는 URI를 사용하여 클라우드 개체 스토리지의 데이터에 액세스합니다.

도구 예시
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL 및 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 파일 시스템 유틸리티 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 지원되지 않음
Databricks REST API 지원되지 않음
Bash 셸 명령 지원되지 않음
라이브러리 설치 %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas 지원되지 않음
OSS Python 지원되지 않음

참고 항목

클라우드 개체 스토리지는 자격 증명 통과를 지원하지 않습니다.

DBFS 탑재 및 DBFS 루트의 파일 작업

DBFS 탑재는 Unity 카탈로그를 사용하여 보안이 유지되지 않으며 Databricks에서 더 이상 권장되지 않습니다. DBFS 루트에 저장된 데이터는 작업 영역의 모든 사용자가 액세스할 수 있습니다. Databricks는 DBFS 루트에 중요한 코드 또는 프로덕션 코드 또는 데이터를 저장하지 않는 것이 좋습니다. DBFS(Databricks 파일 시스템)란?을 참조하세요.

도구 예시
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL 및 Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
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" }'
Bash 셸 명령 %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
라이브러리 설치 %pip install /dbfs/mnt/path/to/my_library.whl
Pandas df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
OSS Python os.listdir('/dbfs/mnt/path/to/directory')

참고 항목

dbfs:/ Databricks CLI를 사용하는 경우 스키마가 필요합니다.

드라이버 노드에 연결된 임시 스토리지의 파일 작업

드라이버 노드에 연결된 임시 스토리지는 네이티브 POSIX 기반 경로 액세스가 있는 블록 스토리지입니다. 클러스터가 종료되거나 다시 시작될 때 이 위치에 저장된 모든 데이터가 사라집니다.

도구 예시
Apache Spark 지원되지 않음
Spark SQL 및 Databricks SQL 지원되지 않음
Databricks 파일 시스템 유틸리티 dbutils.fs.ls("file:/path")
%fs ls file:/path
Databricks CLI 지원되지 않음
Databricks REST API 지원되지 않음
Bash 셸 명령 %sh curl http://<address>/text.zip > /tmp/text.zip
라이브러리 설치 지원되지 않음
Pandas df = pd.read_csv('/path/to/data.csv')
OSS Python os.listdir('/path/to/directory')

참고 항목

file:/ Databricks 유틸리티를 사용하는 경우 스키마가 필요합니다.

임시 스토리지에서 볼륨으로 데이터 이동

Apache Spark를 사용하여 다운로드하거나 임시 스토리지에 저장한 데이터에 액세스할 수 있습니다. 임시 스토리지는 드라이버에 연결되고 Spark는 분산 처리 엔진이므로 모든 작업이 여기에 있는 데이터에 직접 액세스할 수 있는 것은 아닙니다. 드라이버 파일 시스템의 데이터를 Unity 카탈로그 볼륨으로 이동해야 하는 경우 다음 예제와 같이 매직 명령 또는 Databricks 유틸리티를 사용하여 파일을 복사할 수 있습니다.

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>