Azure Synapse Notebook中PySpark读取ADLS文件报Py4JJavaError求助
解决Azure Synapse Notebook中PySpark读取ADLS Gen2文件的Py4JJavaError错误
错误根源
你遇到的Py4JJavaError本质是直接使用HTTPS协议访问ADLS Gen2文件系统导致的:Hadoop的AbstractHttpFileSystem不支持通过HTTPS URL执行文件列表等操作,必须使用ADLS Gen2专用的abfss协议。
解决方案
1. 替换文件路径协议
将原代码中的HTTPS路径替换为abfss格式路径,格式为:abfss://<文件系统名称>@<存储账户名称>.dfs.core.windows.net/<文件路径>
修正后的代码:
%%pyspark # 使用abfss协议访问ADLS Gen2 df=spark.read.load(path='abfss://filesys@adls4acc.dfs.core.windows.net/NYCTripSmall.parquet',format='parquet') display(df.limit(10)) spark.sql("create database if not exists TEMPDB") df.write.mode("overwrite").saveAsTable("TEMPDB.NycData")
2. 验证访问权限
确保Synapse工作区具备ADLS Gen2的访问权限:
- 检查Synapse工作区的托管身份是否被授予ADLS Gen2容器的
存储Blob数据参与者或存储Blob数据读者角色 - 如果使用服务主体,需在Spark配置中添加对应的身份验证参数(Synapse托管身份为默认推荐方式)
补充说明
abfss是Azure为ADLS Gen2设计的Hadoop兼容文件系统协议,支持Spark完整的文件系统操作(列表、读写等),而HTTPS协议仅适用于REST API调用,无法被Spark的Hadoop文件系统客户端识别。
内容的提问来源于stack exchange,提问作者Tris
相关产品推荐
相关产品推荐

