FileStore

FileStore는 파일을 저장하고 웹 브라우저에서 액세스할 수 있도록 하는 DBFS의 특수 폴더입니다. FileStore를 사용하여 다음을 수행할 수 있습니다.

  • displayHTML을 호출할 때 HTML 및 JavaScript 내에서 액세스할 수 있는 이미지 및 라이브러리와 같은 파일을 저장합니다.
  • 다운로드하려는 출력 파일을 로컬 데스크톱에 저장합니다.
  • 로컬 데스크톱에서 CSV 및 기타 데이터 파일을 업로드하여 Databricks에서 처리합니다.

특정 기능을 사용하는 경우 Azure Databricks는 FileStore 아래의 다음 폴더에 파일을 배치합니다.

  • /FileStore/jars - 업로드된 레거시 작업 영역 라이브러리를 포함합니다. 이 폴더에서 파일을 삭제하면 작업 영역에서 이러한 파일을 참조하는 라이브러리가 더 이상 작동하지 않을 수 있습니다.
  • /FileStore/tables - UI를 사용하여 가져온 파일이 포함되어 있습니다. 이 폴더에서 파일을 삭제하면 이러한 파일에서 만든 테이블에 더 이상 액세스할 수 없습니다.

Important

Databricks Runtime 14.3 LTS 이하를 사용하는 경우 DBFS에서 라이브러리를 설치할 수 있습니다. 그러나 모든 작업 영역 사용자는 DBFS에 저장된 라이브러리 파일을 수정할 수 있습니다. Azure Databricks 작업 영역에서 라이브러리의 보안을 강화하기 위해 DBFS 루트에 라이브러리 파일을 저장하는 것은 기본적으로 Databricks Runtime 15.0 이상에서 사용되지 않으며 비활성화됩니다. DBFS 루트에 라이브러리 저장이 사용되지 않고 기본적으로 사용하지 않도록 설정됨을 참조하세요.

대신 Databricks 는 Python 라이브러리, JAR 파일 및 Spark 커넥터를 포함한 모든 라이브러리를 작업 영역 파일 또는 Unity 카탈로그 볼륨에 업로드하거나 라이브러리 패키지 리포지토리를 사용하는 것이 좋습니다 . 워크로드가 이러한 패턴을 지원하지 않는 경우 클라우드 개체 스토리지에 저장된 라이브러리를 사용할 수도 있습니다.

FileStore에 파일 저장

dbutils.fs.put을 사용하여 DBFS의 /FileStore 디렉터리에 임의의 텍스트 파일을 쓸 수 있습니다.

dbutils.fs.put("/FileStore/my-stuff/my-file.txt", "This is the actual text that will be saved to disk. Like a 'Hello world!' example")

다음에서는 <databricks-instance>를 Azure Databricks 배포의 작업 영역 URL로 바꿉니다.

/FileStore에 저장된 파일은 https://<databricks-instance>/files/<path-to-file>?o=######의 웹 브라우저에서 액세스할 수 있습니다. 예를 들어 /FileStore/my-stuff/my-file.txt에 저장한 파일은 https://<databricks-instance>/files/my-stuff/my-file.txt?o=######에서 액세스할 수 있으며 o= 뒤의 숫자는 URL과 동일합니다.

참고 항목

DBFS 파일 업로드 인터페이스를 사용하여 /FileStore 디렉터리에 파일을 넣을 수도 있습니다. DBFS에서 테이블 탐색 및 만들기를 참조하세요.

Notebook에 정적 이미지 포함

files/ 위치를 사용하여 정적 이미지를 Notebook에 포함할 수 있습니다.

displayHTML("<img src ='files/image.jpg'>")

또는 Markdown 이미지 가져오기 구문:

%md
![my_test_image](files/image.jpg)

DBFS API 및 요청 Python HTTP 라이브러리를 사용하여 정적 이미지를 업로드할 수 있습니다. 다음 예제에서

  • <databricks-instance>를 Azure Databricks 배포의 작업 영역 URL로 바꿉니다.
  • <token>개인용 액세스 토큰의 값으로 바꿉니다.
  • <image-dir>를 이미지 파일을 업로드할 FileStore의 위치로 바꿉니다.

참고 항목

보안 모범 사례로, 자동화된 도구, 시스템, 스크립트 및 앱을 사용하여 인증하는 경우 Databricks는 작업 영역 사용자 대신 서비스 주체에 속한 개인용 액세스 토큰을 사용하는 것이 좋습니다. 서비스 주체에 대한 토큰을 만들려면 서비스 주체에 대한 토큰 관리를 참조하세요.

import requests
import json
import os

TOKEN = '<token>'
headers = {'Authorization': 'Bearer %s' % TOKEN}
url = "https://<databricks-instance>/api/2.0"
dbfs_dir = "dbfs:/FileStore/<image-dir>/"

def perform_query(path, headers, data={}):
  session = requests.Session()
  resp = session.request('POST', url + path, data=json.dumps(data), verify=True, headers=headers)
  return resp.json()

def mkdirs(path, headers):
  _data = {}
  _data['path'] = path
  return perform_query('/dbfs/mkdirs', headers=headers, data=_data)

def create(path, overwrite, headers):
  _data = {}
  _data['path'] = path
  _data['overwrite'] = overwrite
  return perform_query('/dbfs/create', headers=headers, data=_data)

def add_block(handle, data, headers):
  _data = {}
  _data['handle'] = handle
  _data['data'] = data
  return perform_query('/dbfs/add-block', headers=headers, data=_data)

def close(handle, headers):
  _data = {}
  _data['handle'] = handle
  return perform_query('/dbfs/close', headers=headers, data=_data)

def put_file(src_path, dbfs_path, overwrite, headers):
  handle = create(dbfs_path, overwrite, headers=headers)['handle']
  print("Putting file: " + dbfs_path)
  with open(src_path, 'rb') as local_file:
    while True:
      contents = local_file.read(2**20)
      if len(contents) == 0:
        break
      add_block(handle, b64encode(contents).decode(), headers=headers)
    close(handle, headers=headers)

mkdirs(path=dbfs_dir, headers=headers)
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
  if ".png" in f:
    target_path = dbfs_dir + f
    resp = put_file(src_path=f, dbfs_path=target_path, overwrite=True, headers=headers)
    if resp == None:
      print("Success")
    else:
      print(resp)

정적 이미지 크기 조정

DBFS에 저장한 이미지의 크기를 조정하려면 이미지를 /FileStore에 복사한 다음, displayHTML의 이미지 매개 변수를 사용하여 크기를 조정합니다.

dbutils.fs.cp('dbfs:/user/experimental/MyImage-1.png','dbfs:/FileStore/images/')
displayHTML('''<img src="files/images/MyImage-1.png" style="width:600px;height:600px;">''')

Notebook 예제: JavaScript 라이브러리 사용

이 Notebook은 FileStore를 사용하여 JavaScript 라이브러리를 포함하는 방법을 보여줍니다.

DBFS FileStore 예제 Notebook

전자 필기장 가져오기