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

PyCharm通过Databricks Connect调用Spark列出Azure Data Lake文件报错求助

解决Databricks Connect访问Azure Data Lake时指向本地文件系统的问题

这个问题的核心原因是:你在本地创建了全新的Hadoop Configuration实例,而没有加载Databricks集群上已经配置好的ADLS相关Hadoop参数,导致FileSystem默认使用了本地的file:///实现,而非ADLS对应的adl://实现。

下面是具体的修复方案:

方案1:使用集群的Hadoop配置而非本地空配置

把你代码中创建conf的部分替换成从SparkContext获取集群的Hadoop配置,这样会自动加载集群上已经配置好的ADLS访问参数(比如服务主体信息、ADLS endpoint配置等):

sc = spark.sparkContext
hadoop = sc._jvm.org.apache.hadoop
fs = hadoop.fs.FileSystem
# 关键修改:获取集群的Hadoop配置,而非创建本地空配置
conf = sc._jsc.hadoopConfiguration()
path = hadoop.fs.Path('adl://<Account>.azuredatalakestore.net/<path>')
for f in fs.get(conf).listStatus(path):
    print(f.getPath(), f.getLen())

方案2:改用Spark原生API列举文件(更推荐)

直接操作Hadoop的FileSystem API容易出现配置不一致的问题,更推荐使用Spark原生的API来实现文件列举,这样会自动复用Databricks Connect的集群配置:

方法A:使用Spark SQL的LIST命令

spark.sql("LIST 'adl://<Account>.azuredatalakestore.net/<path>'").show(truncate=False)

方法B:使用Spark的File API

from pyspark.sql import functions as F

# 获取文件列表详情
df = spark.read.format("binaryFile").load("adl://<Account>.azuredatalakestore.net/<path>")
df.select(F.col("path"), F.col("length")).show(truncate=False)

额外注意事项

  • 确保你运行databricks-connect configure时,配置的集群是已经正确配置了ADLS访问权限的(比如通过服务主体、Managed Identity等方式授权)。
  • 本地的databricks-connect版本需要和Databricks集群的版本保持一致,版本不匹配也可能导致配置加载异常。

内容的提问来源于stack exchange,提问作者Amitoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:07:43