FileStore

FileStore är en särskild mapp i DBFS där du kan spara filer och få dem tillgängliga för webbläsaren. Du kan använda FileStore för att:

  • Spara filer, till exempel bilder och bibliotek, som är tillgängliga i HTML och JavaScript när du anropar displayHTML.
  • Spara utdatafiler som du vill ladda ned till ditt lokala skrivbord.
  • Ladda upp CSV:er och andra datafiler från ditt lokala skrivbord för att bearbeta på Databricks.

När du använder vissa funktioner placerar Azure Databricks filer i följande mappar under FileStore:

  • /FileStore/jars – innehåller uppladdade äldre arbetsytebibliotek. Om du tar bort filer i den här mappen kanske bibliotek som refererar till dessa filer på arbetsytan inte längre fungerar.
  • /FileStore/tables– innehåller de filer som du importerar med hjälp av användargränssnittet. Om du tar bort filer i den här mappen kanske tabeller som du skapade från dessa filer inte längre är tillgängliga.

Viktigt!

Bibliotek kan installeras från DBFS när du använder Databricks Runtime 14.3 LTS och nedan. Alla arbetsyteanvändare kan dock ändra biblioteksfiler som lagras i DBFS. För att förbättra säkerheten för bibliotek på en Azure Databricks-arbetsyta är lagring av biblioteksfiler i DBFS-roten inaktuell och inaktiverad som standard i Databricks Runtime 15.0 och senare. Se Lagra bibliotek i DBFS-roten är inaktuell och inaktiverad som standard.

I stället rekommenderar Databricks att du laddar upp alla bibliotek, inklusive Python-bibliotek, JAR-filer och Spark-anslutningsappar, till arbetsytefiler eller Unity Catalog-volymer eller använder bibliotekspaketdatabaser. Om din arbetsbelastning inte stöder dessa mönster kan du även använda bibliotek som lagras i molnobjektlagring.

Spara en fil i FileStore

Du kan använda dbutils.fs.put för att skriva godtyckliga textfiler till /FileStore katalogen i DBFS:

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")

I följande ersätter du <databricks-instance> med arbetsytans URL för din Azure Databricks-distribution.

Filer som lagras i /FileStore är tillgängliga i webbläsaren på https://<databricks-instance>/files/<path-to-file>?o=######. Filen som du lagrade i /FileStore/my-stuff/my-file.txt är till exempel tillgänglig där https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### talet efter o= är detsamma som i url:en.

Kommentar

Du kan också använda DBFS-filuppladdningsgränssnitten för att placera filer i /FileStore katalogen. Se Utforska och skapa tabeller i DBFS.

Bädda in statiska bilder i notebook-filer

Du kan använda platsen files/ för att bädda in statiska bilder i dina notebook-filer:

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

eller Markdown-bildimportsyntax:

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

Du kan ladda upp statiska avbildningar med hjälp av DBFS-API:et och python HTTP-biblioteket för begäranden. I följande exempel:

  • Ersätt <databricks-instance> med arbetsytans URL för din Azure Databricks-distribution.
  • Ersätt <token> med värdet för din personliga åtkomsttoken.
  • Ersätt <image-dir> med platsen FileStore där du vill ladda upp bildfilerna.

Kommentar

När du autentiserar med automatiserade verktyg, system, skript och appar rekommenderar Databricks att du använder personliga åtkomsttoken som tillhör tjänstens huvudnamn i stället för arbetsyteanvändare. Information om hur du skapar token för tjänstens huvudnamn finns i Hantera token för tjänstens huvudnamn.

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)

Skala statiska bilder

Om du vill skala storleken på en bild som du har sparat i DBFS kopierar du bilden till /FileStore och ändrar sedan storlek med hjälp av bildparametrar i 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-exempel: Använda ett JavaScript-bibliotek

Den här notebook-filen visar hur du använder FileStore för att innehålla ett JavaScript-bibliotek.

DBFS FileStore-exempelanteckningsbok

Hämta notebook-fil