Azure HDInsight Blob Store读取CSV文件报错:路径不存在但文件实际存在
排查Jupyter Notebook读取Azure HDInsight Blob存储文件失败的问题
我帮你梳理几个常见的排查方向,这种“文件明明存在却报路径不存在”的问题,大多是细节没对上:
1. 核对wasb路径的格式细节
Azure Blob的路径格式容不得半点错,仔细检查这几个点:
- 确认容器名
spk123-2018、存储账户名dreamcatcher完全匹配Blob存储里的实际名称,容器和文件名都是大小写敏感的,别小看大小写差异! - 如果你的存储是Azure Data Lake Storage Gen2,记得用
abfs协议而不是wasb,比如把路径改成abfs://spk123-2018@dreamcatcher.dfs.core.windows.net/data/raw-flight-data.csv,这是很容易混淆的点
2. 验证HDInsight集群的访问权限
就算文件在那,集群没权限也读不到:
- 如果你用的是存储账户访问密钥,在Notebook里跑这段代码检查配置是否生效:
如果返回sc._jsc.hadoopConfiguration().get("fs.azure.account.key.dreamcatcher.blob.core.windows.net")None,说明密钥没配置成功,手动添加:spark.conf.set( "fs.azure.account.key.dreamcatcher.blob.core.windows.net", "<你的存储账户访问密钥>" ) - 如果用托管标识,确认这个标识已经被授予了目标Blob容器的存储Blob数据读取者角色
3. 检查文件名和路径的大小写、特殊字符
- Blob存储对文件名的大小写是严格区分的,比如
Raw-Flight-Data.csv和raw-flight-data.csv会被当成两个不同文件,仔细核对你的文件名是否完全一致 - 如果路径里有空格、括号这类特殊字符,尝试用引号包裹路径,或者直接复制Blob存储里的完整路径粘贴到代码里,避免手动输入错误
4. 直接测试路径的可达性
在Notebook里尝试列出目录内容,确认路径是否真的能访问:
# 列出容器根目录的内容 dbutils.fs.ls("wasb://spk123-2018@dreamcatcher.blob.core.windows.net/") # 列出data子目录的内容 dbutils.fs.ls("wasb://spk123-2018@dreamcatcher.blob.core.windows.net/data/")
如果这一步报错,说明集群和Blob存储的连通或权限有问题;如果能看到文件,再核对文件名和你要读取的是否完全匹配
5. 尝试用相对路径访问(针对默认存储)
如果这个文件在HDInsight集群的默认存储容器里,试试用相对路径简化操作:
df = spark.read.csv("/data/raw-flight-data.csv", header=True)
这样可以排除wasb协议格式带来的问题
内容的提问来源于stack exchange,提问作者George Varghese
相关产品推荐
相关产品推荐

