프로그래밍 방식으로 작업 영역 파일과 상호 작용

프로그래밍 방식으로 Azure Databricks에 저장된 작업 영역 파일과 상호 작용할 수 있습니다. 이렇게 하면 다음과 같은 작업을 수행할 수 있습니다.

  • 노트북과 코드와 함께 작은 데이터 파일을 저장합니다.
  • Git과 동기화된 디렉터리에 로그 파일 작성
  • 상대 경로를 사용하여 모듈 가져오기
  • 환경 사양 파일 만들기 또는 수정
  • 노트북에서 출력 결과를 작성합니다.
  • Tensorboard와 같은 라이브러리 실행 중에 출력 결과를 기록합니다.

Databricks Runtime 11.3 LTS 이상에서 작업 영역 파일을 프로그래밍 방식으로 만들고, 편집하고, 이름을 바꾸고, 삭제할 수 있습니다. 이 기능은 Databricks Runtime 16.2 이상의 Notebook 및 서버리스 환경 2 이상에서 지원됩니다.

메모

작업 영역 파일에 대한 쓰기를 사용하지 않도록 설정하려면 클러스터 환경 변수를 WSFS_ENABLE_WRITE_SUPPORT=false설정합니다. 자세한 내용은 환경 변수참조하세요.

메모

Databricks Runtime 14.0 이상에서는 로컬에서 실행되는 코드의 기본 현재 작업 디렉터리(CWD)가 실행되는 노트북이나 스크립트가 포함된 디렉터리입니다. 이는 Databricks Runtime 13.3 LTS 이하의 동작 변경입니다. 기본 현재 작업 디렉터리는 무엇입니까?.

서버리스 컴퓨트에서는 작업 디렉터리가 보장되지 않으므로, 절대 경로를 사용하여 파일을 참조합니다. 서버리스 컴퓨팅 제한을 참조하세요.

파일의 위치 읽기

셸 명령을 사용하여 리포지토리 또는 로컬 파일 시스템의 파일 위치를 읽습니다.

파일의 위치를 확인하려면 다음을 입력합니다.

%sh ls
  • 파일이 리포지토리에 없습니다. 이 명령은 파일 시스템을 /databricks/driver반환합니다.
  • 파일은 리포지토리에 있습니다. 명령은 /Workspace/Repos/name@domain.com/public_repo_2/repos_file_system같은 가상화된 리포지토리를 반환합니다.

데이터 작업 영역 파일 읽기

전자 필기장 코드에서 .csv 또는 .json 파일과 같은 작은 데이터 파일을 프로그래밍 방식으로 읽을 수 있습니다. 다음 예제에서는 Pandas를 사용하여 프로젝트 리포지토리의 루트를 기준으로 /data 디렉터리에 저장된 파일을 쿼리합니다.

import pandas as pd
df = pd.read_csv("./data/winequality-red.csv")
df

Spark를 사용하여 데이터 파일을 읽을 수 있습니다. Spark에 정규화된 경로를 제공해야 합니다.

  • Git 폴더의 작업 영역 파일은 경로 file:/Workspace/Repos/<user-folder>/<repo-name>/path/to/file사용합니다.
  • 개인 디렉터리의 작업 영역 파일은 file:/Workspace/Users/<user-folder>/path/to/file경로를 사용합니다.

파일 옆에 있는 드롭다운 메뉴에서 파일에 대한 절대 또는 상대 경로를 복사할 수 있습니다.

파일 드롭다운 메뉴

아래 예제에서는 {os.getcwd()} 사용하여 전체 경로를 가져오는 방법을 보여줍니다.

import os
spark.read.format("csv").load(f"file:{os.getcwd()}/my_data.csv")

메모

DBFS 루트 및 탑재를 사용하지 않도록 설정된 작업 영역에서 Databricks 유틸리티를 사용하여 dbfs:/Workspace 작업 영역 파일에 액세스할 수도 있습니다. 이를 위해서는 Databricks Runtime 13.3 LTS 이상이 필요합니다. 기존 Azure Databricks 작업 영역에서 DBFS 루트 및 탑재에 대한 액세스 비활성화를 참조하세요.

Azure Databricks의 파일에 대해 자세히 알아보려면 Azure Databricks에서 파일 작업하기를 참조하세요.

프로그래밍 방식으로 파일 및 디렉터리 만들기, 업데이트 및 삭제

표준 파일 시스템에서 파일을 사용하는 방법과 비슷하게 Azure Databricks에서 작업 영역 파일을 프로그래밍 방식으로 조작할 수 있습니다.

메모

Databricks Runtime 16.2 이상 및 서버리스 환경 2 이상에서는 전자 필기장에서도 파일과의 모든 프로그래밍 방식 상호 작용을 사용할 수 있습니다. 파일을 Notebook으로 변환하는 방법에 대한 자세한 내용은 파일을 Notebook으로 변환을 참조하세요.

메모

파일의 상위 디렉터리는 쓰기 전에 이미 존재해야 합니다. Azure Databricks는 파일 쓰기를 버퍼링한 다음 이를 비동기적으로 작업 영역에 플러시하므로, 부모 디렉터리가 없는 경로에 쓰면 쓰기 호출을 수행할 때가 아니라 그 이후에 AsyncFlushFailedException와 함께 실패합니다. 다음 예시에서 보듯이 먼저 부모 디렉터리를 생성하세요.

다음 예제에서는 표준 Python 패키지 및 기능을 사용하여 파일 및 디렉터리를 만들고 조작합니다.

import os

# Create a new directory

os.mkdir('dir1')

# Create a new file and write to it

with open('dir1/new_file.txt', "w") as f:
    f.write("new content")

# Append to a file

with open('dir1/new_file.txt', "a") as f:
    f.write(" continued")

# Delete a file

os.remove('dir1/new_file.txt')

# Delete a directory

os.rmdir('dir1')
import shutil

# Copy a dashboard

shutil.copy("my-dashboard.lvdash.json", "my-dashboard-copy.lvdash.json")

# Move a query to a shared folder

shutil.move("test-query.dbquery","shared-queries/")


중복 자산 이름 해결

경우에 따라 작업 공간 폴더에 이미 같은 이름을 가진 자산이 포함되어 있을 수도 있습니다. 예를 들어 두 SQL 쿼리의 이름이 모두 My query일 수 있습니다. 이는 이름 고유성이 완전히 시행되기 전에 자산이 생성되었을 때 발생할 수 있습니다.

폴더에 중복된 자산 이름이 있을 경우, 파일 기반 접근이 실패하지만, 자산 자체는 영향을 받지 않습니다. 다음과 같은 오류가 표시됩니다.

  • Name not unique on network (OSError: [Errno 76])—예를 들어, 웹 터미널에서 ls 또는 다른 명령을 실행하거나 노트북에서 폴더를 나열할 때입니다.
  • File name conflict 또는 RESOURCE_CONFLICT: Duplicate entities detected in the directory, 예를 들어 Git 폴더 작업 중에

메모

중복된 이름은 자산 자체에는 영향을 주지 않습니다. 작업공간 브라우저에서 각 자산을 여전히 열고 사용할 수 있습니다. 파일 시스템을 통해 폴더에 도달하는 명령어들—예: 웹 터미널, WSFS, Git 폴더 작업—만 영향을 받습니다.

중복 이름을 가진 자산을 찾으려면 다음 노트북을 실행하세요. 폴더와 그 하위 폴더들을 스캔하고 같은 이름을 가진 자산을 나열합니다. 노트북은 읽기 전용이며 자산 이름을 바꾸거나 삭제하지 않습니다.

중복된 작업 공간 자산 찾기

노트북 받기

작업 공간 UI를 이용해 중복된 이름 문제를 해결하려면:

  1. 작업 공간 브라우저에서 노트북에서 식별한 각 폴더를 열어보세요.
  2. 폴더 내 모든 자산이 고유한 이름을 가질 때까지 중복 자산의 이름을 바꾸거나 삭제하세요.

폴더 내 모든 자산 이름이 고유해지면 파일 기반 접근이 다시 작동합니다.