通过Notebook从Azure Synapse加载数据至DataFrame报sqlanalytics属性错误
错误原因
你遇到的报错是因为PySpark的DataFrameReader原生没有sqlanalytics方法,这个方法是旧版Azure Synapse Spark连接器提供的专属API,触发报错的常见原因有两个:
- 当前Spark环境没有安装Azure Synapse专属连接器依赖包
- 新版Synapse连接器已经将该API重命名为
synapsesql,沿用旧写法导致调用失败
解决方案
如果你在Azure Synapse工作区的内置Spark池中运行代码:
直接将原代码中的sqlanalytics替换为synapsesql即可,示例写法:# 读取Synapse专用池表数据到DataFrame df = spark.read.synapsesql("<数据库名称>.<Schema名称>.<表名>")该环境默认预装了最新版Synapse连接器,不需要额外配置依赖。
如果你在非Synapse工作区的Spark环境(本地Spark、第三方Spark服务等)运行代码:
第一步先在Spark配置中添加对应版本的Synapse连接器Maven依赖,参考依赖坐标为com.microsoft.azure:synapse-analytics-spark:3.1.0_2.12:1.0.0,需要和你使用的Spark、Scala版本匹配。
第二步配置好ADLS Gen2存储访问凭据、Synapse实例身份认证信息后,即可调用对应API读取数据。临时替代方案:使用通用JDBC方式读取,不需要安装专属连接器,示例代码:
jdbcConnectionStr = "jdbc:sqlserver://<你的Synapse服务器名>.sql.azuresynapse.net:1433;database=<数据库名>;user=<登录用户名>;password=<登录密码>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;" df = spark.read.format("jdbc") \ .option("url", jdbcConnectionStr) \ .option("dbtable", "<Schema名>.<目标表名>") \ .load()
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

