You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Azure存储账户读取数据遇异常:仅h=00/m=00目录文件失败

问题描述

将Azure Data Factory(ADF)日志写入Storage Account后,在Databricks中用以下代码读取处理日志文件:

path = f"abfss://{container}@{accountname}.dfs.core.windows.net/resourceId=/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/HR_GROUP/PROVIDERS/MICROSOFT.DATAFACTORY/FACTORIES/TMOFACTORY/y=2023/m=08/d=30/h=02/m=00/PT1H.json"
spark_df = spark.read.option('multilines','true').json(path)

多数文件可正常读取,但仅h=00/m=00目录下的PT1H.json无法读取;将该文件下载重命名后上传至其他目录则能正常读取。

排查方向
  • 路径解析异常:h=00/m=00中的00可能触发了Spark路径解析的特殊逻辑,虽然格式和其他小时目录一致,但部分场景下开头为0的数值目录会被误处理。可以尝试直接用字符串字面量指定该文件的绝对路径,而非格式化字符串,验证是否是路径拼接时的转义问题。
  • 文件元数据/权限问题:原目录下的文件可能存在元数据损坏(比如ETag、Content-Length属性异常),或者Databricks使用的服务主体对h=00/m=00目录的权限存在隐性限制(哪怕其他目录权限正常,该目录的权限继承可能出问题)。可以通过Azure Portal查看该文件的元数据,对比正常文件的属性,同时检查身份对该目录的读取权限是否完整。
  • 文件内容隐性格式问题:原文件可能包含不可见字符(如BOM头、特殊换行符),Spark的JSON解析器在原路径读取时未正确处理,但下载重传后这些字符被自动清除。可以下载该文件,用VS Code开启「显示所有字符」功能对比重传后文件的内容差异,也可以在Databricks中先读取为文本格式排查:
    text_df = spark.read.text(path)
    text_df.show(truncate=False)
    
  • 缓存状态异常:Databricks可能缓存了该路径的错误读取状态,导致无法正常读取。可以尝试清除Spark缓存:
    spark.catalog.clearCache()
    
    或者重启集群后再尝试读取。
  • ADF写入异常:ADF写入h=00/m=00目录下的文件时可能出现写入中断、部分写入的情况,导致文件结构不完整但未被标记为损坏。下载重传相当于生成了完整的文件副本,因此可以正常读取。可以检查ADF对应时间段的运行日志,确认该日志文件的写入过程是否正常完成。

内容的提问来源于stack exchange,提问作者Đặng Việt Khánh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:10