使用Databricks Job API Runs-Submit端点调用Databricks Notebook

时间:2019-05-15 16:03:38

标签: databricks

我正在尝试建立一个AWS lambda函数来调用databricks笔记本(如果发生s3触发器)。我知道我必须在lambda函数(python)代码中使用databricks的Jobs API进行POST使用runs-submit函数的JSON有效负载进行请求。

尽管文档不是很清楚,但我能够调用测试脚本,并在检查响应文本时看到databricks登录页面html代码,这意味着该代码未通过身份验证。

我确实读过用户令牌,但是我不确定如何将它们合并以进行身份​​验证。

以其他方式进行此工作或帮助我使用user_tokens进行身份验证以使流程到达笔记本的执行而不是停止在身份验证页面上的任何帮助都是有用的。

谢谢。

代码示例:

import requests
import json

job_payload = {
  "run_name": 'just_a_run',
  "existing_cluster_id": '****',
  "notebook_task": 
    {
      "notebook_path": 'https://databricks.cloud.company.com/****'
    }
}

resp = requests.post('https://databricks.cloud.company.com/2.0/jobs/runs/submit', json=job_payload)
print(resp.status_code)
print(resp.text)

200


<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="Content-Language" content="en"/>
    <title>Databricks - Sign In</title>
    <meta name="viewport" content="width=960">
    <link rel="stylesheet" href="/login/bootstrap.min.css">
    <link rel="icon" type="image/png" href="login/favicon.ico" />

    <meta http-equiv="content-type" content="text/html; charset=UTF8">
<link rel="shortcut icon" href="favicon.ico"><link href="login/login.e555bb48.css" rel="stylesheet"></head>
<body>
<div id="login-page"></div>
<script type="text/javascript" src="login/login.dabd48fd.js"></script></body>
</html>

1 个答案:

答案 0 :(得分:0)

已解决:

1)您将需要创建用于授权的用户令牌,并在执行REST请求时将其作为“标头”参数发送。

2)标头= {'Authorization':'Bearer token'} 代替令牌必须是您从数据块获得的实际令牌。

3)api链接必须以/ api

开头

4)databricks笔记本的路径必须是绝对路径 即“ / Users / $ USER_NAME / book_name”

最终工作代码:

import requests
import json

job_payload = {
  "run_name": 'just_a_run',
  "existing_cluster_id": 'id_of_cluster',
  "notebook_task": 
    {
      "notebook_path": '/Users/username/notebook_name'
    }
}

resp = requests.post('https://databricks.cloud.company.com/api/2.0/jobs/runs/submit', json=job_payload, headers={'Authorization': 'Bearer token'})

print(resp.status_code)

print(resp.text)