Spark数据框使用不同的ADL凭证保存

时间:2019-01-03 10:33:14

标签: azure apache-spark apache-spark-sql azure-data-lake

我设计了一个spark应用程序,该应用程序执行以下步骤:

  1. 从ADL位置读取某些格式的数据,例如: adl://sampleaccount1.azuredatalakestore.net/sample_data/sample_1/并创建一个DataFrame。
  2. 对输入DataFrame进行某些转换。
  3. 将数据写入不同的adl帐户位置,例如: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级别维护,因此在处理输入数据时无法从源位置读取数据。

有人尝试过这种情况吗?


0 个答案:

没有答案