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

Azure Synapse Spark处理1900年前日期Parquet配置报错求解

问题原因

你套用的是AWS Glue环境的配置逻辑,在Azure Synapse Spark中完全不适用:

  • Azure Synapse Spark是托管式会话环境,不支持在Notebook代码中手动停止并重建SparkContext。会话启动时YARN ApplicationMaster已经完成了SparkContext的初始化注册,你手动调用sc.stop()后再创建新上下文,会触发重复初始化异常,也就是你看到的Promise already completed报错。
  • 代码中引用的GlueContext是AWS Glue专属组件,Synapse Spark原生不提供,就算上下文不报错这行也跑不通。
可行配置方案

方案1:会话预配置(推荐)

直接在Spark会话或Spark池配置中提前添加以下参数,会话启动时自动加载,不需要在业务代码中加任何上下文操作:

  • spark.sql.legacy.parquet.int96RebaseModeInRead = CORRECTED
  • spark.sql.legacy.parquet.int96RebaseModeInWrite = CORRECTED
  • spark.sql.legacy.parquet.datetimeRebaseModeInRead = CORRECTED
  • spark.sql.legacy.parquet.datetimeRebaseModeInWrite = CORRECTED
    如果是单个Notebook临时使用,直接在Notebook顶部的「配置会话」面板中添加以上参数即可。

方案2:代码内动态配置(无需重启会话)

如果不想修改会话配置,直接在Notebook最顶部、所有Parquet读写逻辑之前,用Notebook默认初始化好的spark对象设置参数即可,完全不需要操作SparkContext:

%%pyspark
spark.conf.set("spark.sql.legacy.parquet.int96RebaseModeInRead", "CORRECTED")
spark.conf.set("spark.sql.legacy.parquet.int96RebaseModeInWrite", "CORRECTED")
spark.conf.set("spark.sql.legacy.parquet.datetimeRebaseModeInRead", "CORRECTED")
spark.conf.set("spark.sql.legacy.parquet.datetimeRebaseModeInWrite", "CORRECTED")
补充注意事项
  • 所有托管类Spark Notebook环境(Synapse、Databricks等)都不支持手动停止重建SparkContext,上下文生命周期由平台统一管控,手动干预必然报错。
  • 如果配置完CORRECTED模式后仍存在日期偏移问题,可以将参数值替换为LEGACY试下:CORRECTED模式使用Proleptic Gregorian日历处理1900年前日期,LEGACY模式使用混合日历兼容旧版Spark/Hive写入的历史Parquet文件,根据源文件的实际生成版本选择即可。

内容的提问来源于stack exchange,提问作者DaarioNaharis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:51:46