我正在开发一个使用 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 编写的其他代码示例,但没有帮助。
我不想浪费任何人的时间。但是,请有人帮我弄清楚出了什么问题或我可以遵循的任何其他标准程序吗?