将DevOps仓库文件导入Databricks工作区API报错求助
解决Databricks Workspace Import API的"无效zip文件"错误
问题分析
调用Databricks Workspace Import API导入pyodbc.sh脚本时出现INVALID_PARAMETER_VALUE错误,提示zip文件无效,核心原因是API误将脚本内容识别为zip格式,或参数配置不符合单个SOURCE文件的导入规范。
修复步骤
1. 确保目标父目录存在
先确认/Workspace/Init目录已在Databricks工作区创建,若不存在则先调用API创建:
$createDirUrl = "$databricksInstance/api/2.0/workspace/mkdirs" $dirBody = @{ path = '/Workspace/Init' } | ConvertTo-Json Invoke-RestMethod -Uri $createDirUrl -Method POST -Headers @{Authorization = $InternalBearerToken } -Body $dirBody -ContentType "application/json"
2. 调整API请求参数
修改请求体,添加language字段明确脚本类型为BASH,同时修正参数配置:
$body = @{ path = $workspacePath content = $fileBase64 format = "SOURCE" language = "BASH" # 明确指定脚本语言 overwrite = $true # 按需设置是否覆盖现有文件 } | ConvertTo-Json
3. 验证Base64编码正确性
确保文件内容的Base64编码无异常,可重新执行编码操作:
$fileContent = Get-Content -Path $localFilePath -Raw -Encoding Byte $fileBase64 = [Convert]::ToBase64String($fileContent)
4. 完整修复后代码
$initFolder = Join-Path -Path $PSScriptRoot -ChildPath 'InitScripts' $localFilePath = Join-Path -Path $initFolder -ChildPath 'pyodbc.sh' $databricksInstance = "https://adb-88888888888888.88.azuredatabricks.net" $workspaceDirPath = '/Workspace/Init' $workspaceFilePath = Join-Path -Path $workspaceDirPath -ChildPath 'pyodbc.sh' # 创建目标目录 $createDirUrl = "$databricksInstance/api/2.0/workspace/mkdirs" $dirBody = @{ path = $workspaceDirPath } | ConvertTo-Json Invoke-RestMethod -Uri $createDirUrl -Method POST -Headers @{Authorization = $InternalBearerToken } -Body $dirBody -ContentType "application/json" # 读取并编码文件内容 $fileContent = Get-Content -Path $localFilePath -Raw -Encoding Byte $fileBase64 = [Convert]::ToBase64String($fileContent) # 调用导入API $apiUrl = "$databricksInstance/api/2.0/workspace/import" $body = @{ path = $workspaceFilePath content = $fileBase64 format = "SOURCE" language = "BASH" overwrite = $true } | ConvertTo-Json $response = Invoke-RestMethod -Uri $apiUrl -Method POST -Headers @{Authorization = $InternalBearerToken } -Body $body -ContentType "application/json" Write-Output "初始化脚本写入完成" $response
额外说明
- 导入代码类文件(如.sh、.py)时,
format="SOURCE"必须配合language参数明确文件类型,否则API无法正确识别格式,会误判为zip包。 - 若仍有问题,可尝试将
format改为"TEXT",适用于纯文本文件导入场景。
内容的提问来源于stack exchange,提问作者Greencolor
相关产品推荐
相关产品推荐

