Fabric Python Notebook写入Parquet文件时出现间歇性认证失败错误
Fabric Python Notebook写入Parquet文件时出现间歇性认证失败错误
看起来你遇到的是间歇性的ABFSS存储认证失败问题,这种情况大多和访问令牌过期有关,结合Fabric环境的特点,我给你分析下原因和解决办法:
问题根源
- ABFSS访问令牌自动过期:你用
pandas.to_parquet结合pyarrow直接写入ABFSS时,底层依赖的临时访问令牌是有有效期的(Fabric环境的临时token通常1小时左右过期),而pandas+pyarrow没有自动刷新令牌的机制,所以运行一段时间后就会触发认证失败。 - 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")
额外注意事项
- API令牌的有效期处理:如果你的API Bearer token是硬编码的,这个令牌同样可能过期,建议用对应身份验证库(比如MSAL,若API是Azure AD保护)自动获取、刷新令牌,不要固定写死。
- Fabric环境的最佳实践:在Fabric中优先使用Spark处理云存储的读写操作,Spark会自动和Fabric的身份系统集成,全程自动维护认证状态,避免手动处理令牌的麻烦。
这样调整后,应该就能彻底解决你的间歇性认证报错问题了~
备注:内容来源于stack exchange,提问作者NutellaKing
相关产品推荐
相关产品推荐

