如何将使用adal生成Azure AD令牌连接SQL Server的Python代码转为Scala
Scala 实现通过AD令牌连接SQL Server数据库
前置依赖
首先需要在项目中引入两个核心依赖,以sbt配置为例:
// 微软官方Azure AD认证库,用于获取访问令牌 libraryDependencies += "com.microsoft.aad" % "msal4j" % "1.13.8" // Azure SQL Server Spark 连接器 libraryDependencies += "com.microsoft.azure" % "azure-sqldb-spark" % "1.0.2"
如果使用Maven,自行转换对应坐标即可。
完整实现代码
代码逻辑与你提供的Python版本完全对齐,分为令牌获取和数据读取两个部分:
import com.microsoft.aad.msal4j.{ClientCredentialParameters, ConfidentialClientApplication} import org.apache.spark.sql.SparkSession import java.util.Collections // 自定义配置项,替换为实际业务值即可 val AUTHORITY_URL = "https://login.microsoftonline.com/<你的Azure租户ID>" val CLIENT_ID = "<你的应用客户端ID>" val CLIENT_SECRET = "<你的应用客户端密钥>" val SQL_JDBC_URL = "jdbc:sqlserver://<SQL服务器名>.database.windows.net:1433;database=<数据库名>" // 1. 获取AD访问令牌,对应Python版本的adal调用逻辑 val clientApp = ConfidentialClientApplication .builder(CLIENT_ID, CLIENT_SECRET) .authority(AUTHORITY_URL) .build() val scopes = Collections.singleton("https://database.windows.net/.default") val tokenParams = ClientCredentialParameters.builder(scopes).build() val accessToken = clientApp.acquireToken(tokenParams).join().accessToken() // 2. Spark读取SQL Server数据,参数与Python版本完全一致 val spark = SparkSession.builder() .appName("ADAuthSQLQuery") .getOrCreate() val df = spark.read .format("com.microsoft.sqlserver.jdbc.spark") .option("url", SQL_JDBC_URL) .option("dbtable", "tab1") .option("accessToken", accessToken) .option("hostNameInCertificate", "*.database.windows.net") .load() df.show()
补充说明:如果你仍需兼容旧版ADAL库,仅需替换令牌获取部分的代码即可,Spark读取逻辑无需做任何调整
内容的提问来源于stack exchange,提问作者Haha
相关产品推荐
相关产品推荐

