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

Spark读取Parquet文件出现datetime错误 配置参数不生效问题咨询

问题原因
  • 配置作用域不匹配:你通过spark.conf.set()在PySpark代码单元格中设置的参数仅作用于当前PySpark会话上下文,EMR Studio的%sql魔法命令使用独立的SQL会话上下文,默认不会继承PySpark单元格的配置,因此你之前的参数修改对%sql查询不生效。你通过代码创建的视图是在配置过参数的PySpark会话中运行,所以查询正常,和你的推测一致,问题确实出在%sql查询的场景下。
  • 缺少INT96类型时间戳的兼容配置:你仅配置了普通datetime类型的重基参数,遗漏了spark.sql.legacy.parquet.int96RebaseModeInRead参数。旧版Spark 2.x、Hive写入Parquet时通常会将时间戳字段存储为INT96格式,Spark 3.x读取这类格式的时间戳也需要单独配置兼容规则,否则依然会触发日历兼容报错。
解决方案

你可以根据使用场景选择以下任意一种方案解决问题:

  • 临时生效(仅当前%sql会话有效):在执行查询前,先在%sql单元格中执行以下配置语句:
SET spark.sql.legacy.parquet.datetimeRebaseModeInRead = LEGACY;
SET spark.sql.legacy.parquet.int96RebaseModeInRead = LEGACY;

配置完成后再执行你的查询语句即可正常返回结果。

  • 全局生效(整个EMR集群所有Spark任务都生效):创建EMR集群时,在软件配置项中添加如下配置:
[
  {
    "Classification": "spark-defaults",
    "Properties": {
      "spark.sql.legacy.parquet.datetimeRebaseModeInRead": "LEGACY",
      "spark.sql.legacy.parquet.int96RebaseModeInRead": "LEGACY"
    }
  }
]

如果你不需要对旧版日历的时间做重基校正,直接读取原始值,可以将上述配置中的LEGACY替换为CORRECTED。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:09:03