问题
当你试着读一个文件在WASB火花,得到以下异常:
org.apache.spark。SparkException:工作阶段失败而终止:任务0阶段1.0失败了4次,最近的失败:在舞台上失去了任务0.3 1.0 (10.139.64.5 TID 19日,执行人0):shaded.databricks.org.apache.hadoop.fs.azure.AzureException: com.microsoft.azure.storage。StorageException: Blob类型不正确,请使用正确的Blob类型来访问服务器上的一个Blob。预计BLOCK_BLOB,实际APPEND_BLOB。
当你尝试在WASB使用清单文件dbutils.fs.ls或Hadoop API,得到以下异常:
. io .FileNotFoundException:文件/ < some-directory >并不存在。
导致
WASB文件系统支持三种类型的斑点:块,页面,添加。
- 块斑点是优化上传大的数据块在Hadoop(默认)。
- 页面blob优化随机读和写操作。
- 附加blob附加操作的优化。
看到理解块斑点,附加blob和页面blob获取详细信息。
上述错误发生如果你想读一个blob或附加一个目录列表只包含附加blob。砖和Hadoop AzureWASB实现不支持阅读附加blob。同样当清单目录,添加气泡将被忽略。
没有解决方法,使阅读附加blob或清单目录只包含附加blob。不过,您可以使用Azure CLI或存储Azure SDK Python来确定如果一个目录包含blob或附加文件是一个附加的团。
您可以验证是否通过运行以下目录包含附加blob Azure CLI命令:
阿兹存储blob列\——auth-mode关键\帐户名称<帐户名称> \——容器名称<容器名称> \——prefix <路径>
返回的结果是作为一个JSON文档,你可以很容易地找到blob类型为每个文件。
如果目录是大,你可以限制数量的结果与国旗——num-results < num >。
您还可以使用Azure存储SDK Python和探索WASB文件系统中的文件列表:
% python iter = service.list_blobs iter (blob“容器”):如果blob.properties。blob_type = =“AppendBlob”:打印(“\ t Blob名称:% s, % s“% (blob.name blob.properties.blob_type))
砖不支持访问附加blob使用Hadoop API,但只有当追加到一个文件。
解决方案
没有解决这个问题。
使用Azure CLI或存储Azure SDK Python来确定如果目录包含附加blob或对象是一个附加的团。
您可以实现一个火花SQL UDF或自定义函数使用抽样API加载,阅读,或将气泡对Python使用Azure存储SDK。