다음을 통해 공유


Azure Databricks에서 파일을 작업하는 방법

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

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

이 문서에는 다음 도구에 대한 해당 위치의 파일과 상호 작용하는 예제가 있습니다.

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

Important

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

Scala는 Unity Catalog 및 공유 액세스 모드로 구성된 컴퓨팅에서 Unity Catalog 볼륨 및 작업 영역 파일에 대한 FUSE를 지원합니다. 단일 사용자 액세스 모드 및 Databricks Runtime 14.3 이상으로 구성된 컴퓨팅에서 Scala는 Scala 명령 "cat /Volumes/path/to/file".!!과 같이 Scala에서 시작된 하위 프로세스를 제외하고 Unity Catalog 볼륨 및 작업 영역 파일에 대한 FUSE를 지원합니다.

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

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

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

    URI 경로 다이어그램

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

    POSIX 경로 다이어그램

Unity Catalog 볼륨의 파일 작업

Databricks에서는 클라우드 개체 스토리지에 저장된 표 형식 데이터가 아닌 파일에 대한 액세스를 구성하려면 Unity Catalog를 사용하는 것이 권장됩니다. 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 Catalog 볼륨에 복사합니다. 예시:

    # 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 작업 영역 파일은 Notebooks가 아닌 작업 영역의 파일입니다. 작업 영역 파일을 사용하여 Notebooks 및 기타 작업 영역 자산과 함께 저장된 데이터 및 기타 파일을 저장하고 액세스할 수 있습니다. 작업 영역 파일에는 크기 제한이 있으므로 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를 사용하여 휴지통에서 파일을 복구하거나 영구적으로 삭제할 수 있습니다.

개체 삭제를 참조하세요.

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

Databricks는 Unity Catalog 볼륨을 사용하여 클라우드 개체 스토리지의 파일에 대한 보안 액세스를 구성하는 것이 좋습니다. 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 Catalog를 사용하여 보안이 유지되지 않으며 Databricks에서 더 이상 권장되지 않습니다. DBFS 루트에 저장된 데이터는 작업 영역의 모든 사용자가 액세스할 수 있습니다. Databricks에서는 DBFS 루트에 민감한 정보나 프로덕션 코드 또는 데이터를 저장하지 않는 것이 좋습니다. DBFS란?을 참조하세요.

도구 예시
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 Catalog 볼륨으로 이동해야 한다고 가정합니다. 이 경우 다음 예제와 같이 매직 명령 또는 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>

추가 리소스

로컬 파일을 업로드하거나 Azure Databricks에 인터넷 파일을 다운로드하는 방법에 대한 자세한 내용은 Azure Databricks에 파일 업로드를 참조하세요.