我设计了一个spark应用程序,该应用程序执行以下步骤:
adl://sampleaccount1.azuredatalakestore.net/sample_data/sample_1/
并创建一个DataFrame。adl://sample2.azuredatalakestore.net/processed_data/
输入和输出ADL帐户不同,因此具有不同的 与它们关联的凭据。
在读取数据时,我将adl配置设置为:
val options = Map(
"dfs.adls.oauth2.access.token.provider.type" -> "ClientCredential",
"dfs.adls.oauth2.refresh.url" -> srcRefreshUrl,
"dfs.adls.oauth2.client.id" -> srcClientId,
"dfs.adls.oauth2.credential" -> srcClientKey
)
options.foreach {
case (key, value) => sparkSession.conf.set(key, value)
}
保存最终数据框(即outputDf)时,我将凭据设置为:
val options = Map(
"dfs.adls.oauth2.access.token.provider.type" -> "ClientCredential",
"dfs.adls.oauth2.refresh.url" -> dstRefreshUrl,
"dfs.adls.oauth2.client.id" -> dstClientId,
"dfs.adls.oauth2.credential" -> dstClientKey
)
options.foreach {
case (key, value) => outputDf.sparkSession.sparkContext.hadoopConfiguration.set(key, value)
}
由于凭据在SparkContext级别维护,因此在处理输入数据时无法从源位置读取数据。
有人尝试过这种情况吗?