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
相关产品推荐
相关产品推荐

