如何在databricks笔记本任务中发送列表作为参数?

时间:2019-06-06 21:18:18

标签: rest lambda databricks

我正在使用Databricks Resi API在现有群集中创建一个带有notebook_task的作业,并获得job_id作为回报。 然后,我调用即用型api来触发作业。 在此步骤中,我想通过notebook_params发送一个列表作为参数,这将引发一个错误,提示“字段值的预期非数组”。

有什么办法可以发送列表作为工作的参数?

我也尝试过在base_params中发送list参数,但存在相同的错误。

user_json={
                                "name": job_name,
                                "existing_cluster_id": cluster_id,
                                "notebook_task": {
                                                        "notebook_path": notebook_path
                                                    },
                                "email_notifications":{
                                "on_failure":[email_id]
                                },
                                "max_retries": 0,
                                "timeout_seconds": 3600
                                                }

response=requests.post('https://<databricks_uri>/2.0/jobs/create',headers=head,json=user_json,timeout=5, verify=False)

job_id=response.json()['job_id']

json_job={"job_id":job_id,"notebook_params":{"name":"john doe","my_list":my_list}}

response = requests.post('https://<databricks_uri>/2.0/jobs/run-now', headers=head, json=json_job, timeout=200, verify=False)

1 个答案:

答案 0 :(得分:0)

尚未找到任何本机解决方案,但是我的解决方案是将列表作为字符串传递,并从另一侧解析回去:

json_job={"job_id":job_id,
          "notebook_params":{
                "name":"john doe",
                "my_list":"spam,eggs"
           }
}

然后放入数据块:

my_list=dbutils.widgets.get("my_list")
my_list=my_list.split(",")

在特殊字符周围要格外小心,例如转换为数字类型。

如果列表中的对象比较重要,那么在运行作业之前使用CLI或API将它们作为文件发送到dbfs可能是另一种探索的方法。