在Databricks中创建REST api,向用户显示增量表信息?

问题描述 投票:0回答:2

我想在 Azure Databricks 中创建一个 API 端点,将增量表数据发布给用户。我通过搜索发现没有 REST API 来公开增量表内容。是真的吗?

rest databricks azure-databricks delta-lake databricks-rest-api
2个回答
3
投票

在Databricks中没有REST Api来获取增量表中的数据,但是我们可以使用Databricks作业获取增量表的数据。

按照以下步骤操作,

首先,在databricks中创建一个notebook,它获取delta表中的数据并以Json格式返回数据。 在您的笔记本中添加以下代码,并根据您的表格进行相应更改。

df = spark.sql("SELECT  *  FROM test")
j_son = df.toJSON()

res=""
for i in j_son.collect():
    res = res + "," + i

dbutils.notebook.exit("["+res[1:]+"]")

然后使用此笔记本创建一个作业。

enter image description here

在下一页中创建任务名称,选择笔记本的路径以及需要运行它的集群。 然后点击创建。

enter image description here

创建后您将获得如下详细信息,复制作业ID。

enter image description here

这是 databricks 中的作业,提供用于运行作业、获取该特定作业的结果的 API。

有关更多信息,请参阅此文档。`

接下来创建一个支持服务器,其中 API 请求引发到 databricks 作业。 我使用过 javascript 和expressJs 框架。

在可视代码中打开新文件夹并在终端中执行以下命令。确保您的系统中安装了

nodeJs

npm install express axios cors

您将在文件夹中获得如下项目结构。

enter image description here

接下来,创建.js文件,我的是

btst.js
。 创建后,在该文件中添加以下代码。

const  express = require('express');
const  axios = require('axios');
const  cors = require('cors');
const  app = express();

app.use(cors({
origin:'*'
}));

const  port = 5000;

// Set the access token for authentication
const  token = 'your databricks token';

// Set the base URL for the Databricks REST API
const  baseUrl = 'https://your databricks host/api/2.1/';

app.get('/runjob', async  function(req, res) {
try {
const  headers = {
'Authorization':  `Bearer ${token}`,
'Content-Type':  'application/json'
}

function  sleep(ms) {
return  new  Promise(resolve  =>  setTimeout(resolve, ms));
}

const  requestBody = {
job_id:  "1121949406005982"
};
const  response = await  axios.post(`${baseUrl}jobs/run-now/`, requestBody, { headers });
console.log(`run id : ${response.data.run_id}`)
console.log("job is running...")
const  t_res = await  axios.get(`${baseUrl}jobs/runs/get?run_id=${response.data.run_id}`,{ headers })
task_id = t_res.data.tasks[0].run_id
console.log(`task id : ${task_id}`)
await  sleep(15000)
const  d_res = await  axios.get(`${baseUrl}jobs/runs/get-output?run_id=${task_id}`,{ headers })
j_res = JSON.parse(d_res.data.notebook_output.result)
console.log(j_res)
res.send(j_res);
} catch (error) {
console.log(error)
res.status(500).send(`Error1.......${error}`);
}
});

app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});

您可以在此处粘贴之前在 databricks 中复制的作业 ID。

enter image description here 然后在终端中执行以下命令。

node yourfilename.js

就我而言是

node btst.js

然后您的服务器将在

http://localhost:5000
运行。

您在浏览器中或在端点使用邮递员向此 url 发送

GET
请求。
http://localhost:5000/runjob
,您将获得json格式的数据,以便您可以在任何地方使用它。 这是下面的结果,需要 15 秒才能显示,因为向作业发送 post 请求后需要运行任务,大约需要 10-15 秒。 enter image description here

databricks 表中的数据是 enter image description here


2
投票

您可以利用 Databricks SQL 语句执行 API 来访问 Azure Databricks 上的数据。按照 tutorial 进行操作,该教程展示了如何使用 curl 来使用该 API

© www.soinside.com 2019 - 2024. All rights reserved.