azure-databricks - 从 Azure Databricks DBFS REST 2.0 API 读取文件
问题描述
我正在开发一个使用 Azure Databricks DBFS API 2.0 读取和写入文件的应用程序。此 API 的参考文档: https ://docs.azuredatabricks.net/api/latest/dbfs.html#read
我可以通过将文件转换为base64然后分成1MB的数据块来上传文件(比如说1.4MB的文件)。
由于读取长度限制为 1MB,我正在迭代一个循环以从 offset和 to读取0
数据。现在数据的第一次迭代-是有效的,我可以从我用于上传的原始文件中确认。1000000
1000001
end of the file
0
1000000
但是第二次及以后的数据迭代,base64数据完全不同,并且不存在于原始base64文件中。
以下是我的测试代码:
Second iteration
- 0.4MB
const axios = require('axios')
const fs = require('fs')
axios({
method: 'get',
url: 'https://********.azuredatabricks.net/api/2.0/dbfs/read',
data: {
path: '/Test/backlit-beach-clouds-1684881.jpg',
offset: 0,
length: 1000000
},
headers: {
'Authorization': `Bearer ****`
}
}).then(({data}) => {
if (data) {
console.log('Success', data.bytes_read)
fs.writeFile('./one.txt', data.data, function (err) {
console.log('done', err)
})
} else {
console.log('failed')
}
})
First iteration
- 1MB
const axios = require('axios')
const fs = require('fs')
axios({
method: 'get',
url: 'https://********.azuredatabricks.net/api/2.0/dbfs/read',
data: {
path: '/Test/backlit-beach-clouds-1684881.jpg',
offset: 1000001,
length: 1000000
},
headers: {
'Authorization': `Bearer ****`
}
}).then(({data}) => {
if (data) {
console.log('Success', data.bytes_read)
fs.writeFile('./two.txt', data.data, function (err) {
console.log('done', err)
})
} else {
console.log('failed')
}
})
在这里,*** 被替换为相关的域和令牌。
如您所见,上述测试代码示例将生成one.txt
和two.txt
. 通过使用cat one.txt two.txt > final.txt
我可以获得final.txt
我将用来解码原始文件的内容。
由于这只是一个测试代码,我没有使用任何循环或更好的编码格式。这只是为了了解出了什么问题。
我坚持这个已经超过 1 周了。我指的是为 python 编写的其他代码示例,但没有帮助。
我不想浪费任何人的时间。但是,请有人帮我弄清楚出了什么问题或我可以遵循的任何其他标准程序吗?
解决方案
我已经运行了相同类型的问题并通过迭代提取来解决它。
但是,为了使其工作,我必须从 0 到 1000000 和 1000000 提取到文件末尾。
否则,base64 解码部分没有正确考虑第二个切片的开始。
我发现您不需要将这个额外的字节从一个切片添加到另一个切片。
推荐阅读
- python - 如何使图像向鼠标单击方向移动?
- dns - 在 openwrt uci 命令行中更改 DNS 设置
- javascript - 选择具有相同值的无线电输入时如何禁用具有某些值的无线电输入
- jenkins - 使用 generic-webhook-trigger 插件时,如何在 Job DSL 脚本中创建多个 genericVariables?
- python-3.x - 打印 .csv 文件的最后 3 行
- ios - 你如何自动布局约束按钮内的通知标签?
- xamarin.forms - 定位服务不再后台
- ionic-framework - Ionic3 输入不可选择
- javascript - Javascript全屏切换重置用户视口位置
- c# - Shift+W 的不同动作?它一直只是进入“W”分支,而不是让我专门编写 Shift+W