當與Sparklyr ADLS Gen1讀取數據錯誤

學習如何解決錯誤發生在讀取數據從Azure數據存儲Gen1湖Sparklyr磚。

寫的亞當Pavlacka

去年發表在:2022年12月9日

問題

當使用一個集群啟用了Azure廣告憑據透傳,命令你運行在集群能夠讀和寫你的數據在Azure數據存儲Gen1湖而不需要為訪問存儲配置服務主體的憑證。

例如,您可以使用直接訪問數據

% python spark.read.csv (adl: / /myadlsfolder.azuredatalakestore.net/MyData.csv) .collect ()

然而,當你試圖使用Sparklyr直接訪問數據:

% r spark_read_csv (sc、名稱=“空氣”,路徑=“誹謗聯盟:/ /myadlsfolder.azuredatalakestore.net/MyData.csv”)

它失敗的錯誤:

com.databricks.backend.daemon.data.client.adl。AzureCredentialNotFoundException: Could not find ADLS Gen1 Token

導致

spark_read_csv函數Sparklyr不能提取ADLS牌啟用身份驗證和讀取數據。

解決方案

一個解決方案是使用Azure應用程序id,應用程序的關鍵,目錄id山在DBFS ADLS位置:

% python #憑證,從Azure applicationId ADLS URI = <應用程序id > applicationKey = <應用密鑰> directoryId = < directory-id > adlURI = < adl-uri >斷言adlURI.startswith(“誹謗聯盟:”)、“驗證adlURI變量設置和開始誹謗聯盟:“#山ADLS DBFS dbfsMountPoint = < mount-point-location > dbutils.fs位置。山(mount_point = dbfsMountPoint、源代碼= adlURI extra_configs = {" dfs.adls.oauth2.access.token.provider。類型”:“ClientCredential”、“dfs.adls.oauth2.client。dfs.adls.oauth2 id”: applicationId。”dfs.adls.oauth2.refresh憑證”:applicationKey。”url”:“https://login.microsoftonline.com/{}/ oauth2 /令牌”.format (directoryId)})

然後,在R代碼,使用掛載點讀取數據:

% #安裝Sparklyr % r install.packages (Sparklyr)庫(Sparklyr) #創建Sparklyr連接sc < - spark_connect(方法=“磚”)# % r myData = spark_read_csv讀取數據(sc、名稱=“空氣”,路徑=“dbfs: / < mount-point-location > / myData.csv”)


這篇文章有用嗎?