我们开发了一个 Spark 应用程序,并使用 abfss 协议来消费来自 azure 存储的数据。 Abfss 支持各种身份验证方法(如访问密钥、客户端信用、msi 等)。但是,我们想在 python 中使用 AzureDefaultCredential,获取用于存储的令牌并使用它进行身份验证。好处是我们可以使用相同的代码进行本地开发和生产。 如何实现这一目标?
根据此文档,可以选择从下面的数据块访问 adls gen 2。
我建议您使用
OAuth 2.0 with a Microsoft Entra ID service principal
。
但是您提到了可以使用相同的代码进行本地开发和生产的好处
DefaultAzureCredential
。
它在本地和生产中的工作方式完全不同,因为
DefaultAzureCredential
遵循此文档中提到的凭据,直到它获得一个。
在本地,它将有所不同,如 Azure CLI,而在生产中,它将有所不同,如 Azure 托管身份。
您可以选择上述 3 种方法中的任何一种来代替此方法。
如果您仍希望使用默认凭据,请按照以下步骤操作。
首先,将 Storage Blob Data Contributor 角色授予您的用户分配的与 databricks 关联的托管标识。
接下来,使用默认凭据获取文件系统级别容器上的 SAS 令牌。
代码
account_url = f"https://{accountName}.dfs.core.windows.net"
token_credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url, credential=token_credential)
delegation_key_start_time = datetime.now(timezone.utc)
delegation_key_expiry_time = delegation_key_start_time + timedelta(days=1)
user_delegation_key = service_client.get_user_delegation_key(key_start_time=delegation_key_start_time,key_expiry_time=delegation_key_expiry_time)
start_time = datetime.now(timezone.utc)
expiry_time = start_time + timedelta(days=1)
sas_permissions=FileSystemSasPermissions(read=True,list=True)
containerLevelSasToken = generate_file_system_sas(accountName, file_system_name=fileSystemName,credential=user_delegation_key,expiry=expiry_time,start=start_time,permission=sas_permissions)
接下来,使用此令牌进行配置。
spark.conf.set(f"fs.azure.account.auth.type.{accountName}.dfs.core.windows.net", "SAS")
spark.conf.set(f"fs.azure.sas.token.provider.type.{accountName}.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.sas.FixedSASTokenProvider")
spark.conf.set(f"fs.azure.sas.fixed.token.{accountName}.dfs.core.windows.net",containerLevelSasToken)
df = spark.read.csv(f"abfss://[email protected]/csv/bulk.csv",header=True)
df.show()
输出:
+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
| Date| Symbol| Security Name| Client Name|Buy/Sell|Quantity Traded|Trade Price / Wght. Avg. Price|Remarks|
+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
|29-JUL-2024| 20MICRONS| 20 Microns Limited|GRAVITON RESEARCH...| BUY| 370921| 274.92| -|
|29-JUL-2024| 20MICRONS| 20 Microns Limited|AAKRAYA RESEARCH LLP| BUY| 261663| 281.14| -|
|29-JUL-2024| 20MICRONS| 20 Microns Limited| QE SECURITIES LLP| BUY| 186016| 279.92| -|
|29-JUL-2024| AARON|Aaron Industries ...|SILVER LINE VENTU...| BUY| 67838| 310.92| -|
|29-JUL-2024| AHL|Abans Holdings Li...|VT CAPITAL MARKET...| BUY| 213586| 565.09| -|
|29-JUL-2024| ALANKIT| Alankit Limited|GRAVITON RESEARCH...| BUY| 1567338| 27.49| -|
+-----------+----------+--------------------+--------------------+--------+---------------+------------------------------+-------+
only showing top 20 rows