背景故事:我在 Gen2 存储中有 12 个 zip 文件,每个文件大约 300 mb。 我正在管道作业中运行笔记本。 一切顺利,直到使用 pd.read_csv(compression ='zip') 提取第 6 个 zip 文件。 在 27 分 57 秒左右,令牌已过期。
所以我打开并播放了突触笔记本。
ClientAuthenticationError:服务器无法验证请求。请参阅 www-authenticate 标头中的信息。
错误代码:无效的身份验证信息 Authenticationerrordetail:生命周期验证失败。令牌已过期。
当我运行管道时,它会在类似的位置停止。
我使用的是最低限度,因为我的公司没有足够的资金来增加节点等。微软建议应用失败重试。还表示突触无法处理非用户身份的令牌刷新。
有解决办法吗?或者有屏幕截图可以帮助我吗?谢谢!
在突触中,您可以选择以下身份验证选项。
使用链接服务和使用存储选项。
您可以使用系统或用户管理的身份进行身份验证。
代码:
import pandas as pd
df = pd.read_csv('abfs://<container_name>@<storage_acc_name>.dfs.core.windows.net/<path>/parse1_data_preview.csv', storage_options = {'linked_service' : '<linked_service_name>'})
df
输出:
这不会过期,链接服务会处理这些事情。
代码:
import pandas
#read data file
df = pandas.read_csv('abfs://file_system_name@account_name.dfs.core.windows.net/ file_path', storage_options = {'account_key' : 'account_key_value'})
## or storage_options = {'sas_token' : 'sas_token_value'}
## or storage_options = {'connection_string' : 'connection_string_value'}
## or storage_options = {'tenant_id': 'tenant_id_value', 'client_id' : 'client_id_value', 'client_secret': 'client_secret_value'}
这里我推荐使用
tenant_id
、client_id
和client_secret
。
请参阅以下文档了解更多信息。
教程:使用 Pandas 读取/写入 Synapse Analytics 中无服务器 Apache Spark 池中的 ADLS 数据 - Azure Synapse Analytics |微软学习
教程:使用 FSSPEC 在 Synapse Analytics 中的无服务器 Apache Spark 池中读取/写入 ADLS 数据 - Azure Synapse Analytics |微软学习
如果您仍想使用代币,您需要继续检查是否过期。
以下是逻辑,大家根据自己的需求修改。
token_expiry_buffer = 300
token_expiry_time = 0
def get_token():
global token_expiry_time
token = credential.get_token("https://storage.azure.com/")
token_expiry_time = token.expires_on
return token
def is_token_expired():
current_time = time.time()
return current_time >= (token_expiry_time - token_expiry_buffer)
paths = ["zip1path","zip2path","zip3path"...]
for path in paths:
if is_token_expired:
#refresh the token
get_token()
df = pd.read_csv("path")