[英]Azure Databricks API, how to attach a cluster to an uploaded notebook via API
我正在使用 python 3.6 運行以下腳本以將本地文件上傳到特定文件夾中的 Azure databricks notebooks。 我已遵循此鏈接中的文檔。 使用下面的腳本,我已經能夠上傳筆記本。 但是,我無法弄清楚如何在通過 API 上傳后將集群附加到該筆記本上。我在文檔中找不到它。 完全有可能嗎? 如果是,如何?
我使用的python腳本如下:
import requests
import os
from os.path import isfile, join
from os import listdir
import base64
dbrks_create_dir_url = "https://"+os.environ['DBRKS_INSTANCE']+".azuredatabricks.net/api/2.0/workspace/mkdirs"
dbrks_import_rest_url = "https://"+os.environ['DBRKS_INSTANCE']+".azuredatabricks.net/api/2.0/workspace/import"
DBRKS_REQ_HEADERS = {
'Authorization': 'Bearer ' + os.environ['DBRKS_BEARER_TOKEN'],
'X-Databricks-Azure-Workspace-Resource-Id': '/subscriptions/'+ os.environ['DBRKS_SUBSCRIPTION_ID'] +'/resourceGroups/'+ os.environ['DBRKS_RESOURCE_GROUP'] +'/providers/Microsoft.Databricks/workspaces/' + os.environ['DBRKS_WORKSPACE_NAME'],
'X-Databricks-Azure-SP-Management-Token': os.environ['DBRKS_MANAGEMENT_TOKEN']}
## This is the address of the notebook to upload.
notebooks = os.environ['DefaultWorkingDirectory'] + "/notebooks/"
path = notebooks
onlyfiles = [f for f in listdir(path) if isfile(join(path, f))]
for file in onlyfiles:
fileLocation = path +"/"+ file
data = open(fileLocation, "rb").read()
encoded = base64.b64encode(data)
files = {"content": (fileLocation,encoded)}
if ".py" in file:
fileName = file.split(".")[0]
fileName = fileName.replace(".py", "")
print(fileName)
response = requests.post(dbrks_import_rest_url,headers=DBRKS_REQ_HEADERS, files=files, data={'path': '/Users/myuser/' + fileName, 'language':'PYTHON','format':'SOURCE', 'overwrite': 'true', 'content': encoded})
if response.status_code == 200:
print(response.json)
else:
raise Exception(response.content)
所有操作系統環境變量都是從我的 Azure DevOps 管道發送的。 但是,您不需要從管道執行腳本。 只要您有一個可以訪問數據塊工作區的服務主體,就可以從本地計算機執行它。 要運行 python 腳本,您可以將這些環境變量替換為您自己的憑據。
解釋腳本中的變量:
使上述腳本運行的最后一點:要獲取 DBRKS_BEARER_TOKEN 和 DBRKS_MANAGEMENT_TOKEN 的上述兩個變量,您可以運行以下腳本並手動將 os.environ['DBRKS_BEARER_TOKEN'] 和 os.environ['DBRKS_MANAGEMENT_TOKEN'] 替換為打印出來的腳本執行后的值:
import requests
import json
import os
TOKEN_BASE_URL = 'https://login.microsoftonline.com/' + os.environ['SVCDirectoryID'] + '/oauth2/token'
TOKEN_REQ_HEADERS = {'Content-Type': 'application/x-www-form-urlencoded'}
TOKEN_REQ_BODY = {
'grant_type': 'client_credentials',
'client_id': os.environ['SVCApplicationID'],
'client_secret': os.environ['SVCSecretKey']}
def dbrks_management_token():
TOKEN_REQ_BODY['resource'] = 'https://management.core.windows.net/'
response = requests.get(TOKEN_BASE_URL, headers=TOKEN_REQ_HEADERS, data=TOKEN_REQ_BODY)
if response.status_code == 200:
print(response.status_code)
else:
raise Exception(response.text)
return response.json()['access_token']
def dbrks_bearer_token():
TOKEN_REQ_BODY['resource'] = '2ff814a6-3304-4ab8-85cb-cd0e6f879c1d'
response = requests.get(TOKEN_BASE_URL, headers=TOKEN_REQ_HEADERS, data=TOKEN_REQ_BODY)
if response.status_code == 200:
print(response.status_code)
else:
raise Exception(response.text)
return response.json()['access_token']
DBRKS_BEARER_TOKEN = dbrks_bearer_token()
DBRKS_MANAGEMENT_TOKEN = dbrks_management_token()
os.environ['DBRKS_BEARER_TOKEN'] = DBRKS_BEARER_TOKEN
os.environ['DBRKS_MANAGEMENT_TOKEN'] = DBRKS_MANAGEMENT_TOKEN
print("DBRKS_BEARER_TOKEN",os.environ['DBRKS_BEARER_TOKEN'])
print("DBRKS_MANAGEMENT_TOKEN",os.environ['DBRKS_MANAGEMENT_TOKEN'])
感謝您的寶貴意見。
謝謝用戶 Alex Ott - Stack Overflow 。 將您的建議作為答案發布,以幫助其他社區成員。
您可以為 Databricks 筆記本使用Nutter 框架,使用 Repos 而不是上傳筆記本。
您的 Databricks 工作區需要啟用回購功能。 如果已啟用,您應該會在導航面板中看到“ Repos ”圖標:
參考資料: GitHub - microsoft/nutter:Databricks 筆記本的測試框架和GitHub - alexott/databricks-nutter-repos-demo:在 CI/CD 管道中使用 Nutter 測試 Databricks 筆記本的演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.