You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fabric Python Notebook写入Parquet文件时出现间歇性认证失败错误

Fabric Python Notebook写入Parquet文件时出现间歇性认证失败错误

看起来你遇到的是间歇性的ABFSS存储认证失败问题,这种情况大多和访问令牌过期有关,结合Fabric环境的特点,我给你分析下原因和解决办法:

问题根源

  1. ABFSS访问令牌自动过期:你用pandas.to_parquet结合pyarrow直接写入ABFSS时,底层依赖的临时访问令牌是有有效期的(Fabric环境的临时token通常1小时左右过期),而pandas+pyarrow没有自动刷新令牌的机制,所以运行一段时间后就会触发认证失败。
  2. Fabric环境的认证机制差异:Fabric的Spark上下文本身会自动管理ABFSS的认证和令牌刷新,但pandas直接写云存储走的是独立路径,没法复用这个自动认证能力。

最优解决方案:改用Fabric Spark处理数据写入

直接利用Fabric内置的Spark来完成Parquet写入,完全不用手动处理ABFSS的认证逻辑,还能彻底解决令牌过期问题。修改后的核心代码如下:

import requests
import pandas as pd

# (前面的API请求、数据解析部分保持不变)
if response.status_code == 200:
    data = response.json()
    df = pd.json_normalize(data['value'])
    print("Data retrieved successfully:")
    print(df)
    
    parquet_table_name = "work_logs.parquet"
    parquet_file_path = "abfss://ddddddd/Files/"
    
    # 重点:将Pandas DataFrame转换为Spark DataFrame
    spark_df = spark.createDataFrame(df)
    
    # 用Spark写入Parquet,Fabric自动处理ABFSS认证
    spark_df.write.mode("overwrite").parquet(f"{parquet_file_path}{parquet_table_name}")
    print(f"Data written to {parquet_file_path}{parquet_table_name}")
    
    # 后续读取Parquet或写入Delta表,也建议用Spark完成
    schema = "dbo"
    delta_table_name = f"{schema.lower()}.{table_name}"
    # 直接写入Delta表,无需中间Parquet文件(可选优化)
    spark_df.write.mode("overwrite").format("delta").saveAsTable(delta_table_name)
    print("done")

额外注意事项

  1. API令牌的有效期处理:如果你的API Bearer token是硬编码的,这个令牌同样可能过期,建议用对应身份验证库(比如MSAL,若API是Azure AD保护)自动获取、刷新令牌,不要固定写死。
  2. Fabric环境的最佳实践:在Fabric中优先使用Spark处理云存储的读写操作,Spark会自动和Fabric的身份系统集成,全程自动维护认证状态,避免手动处理令牌的麻烦。

这样调整后,应该就能彻底解决你的间歇性认证报错问题了~

备注:内容来源于stack exchange,提问作者NutellaKing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:48:01