Spark的timestamp 数据时间问题

使用Spark来处理国际业务数据,涉及到数据时区转换,在实际项目中出现时区转换问题。

使用代码:

python 复制代码
spark.conf.set("spark.sql.session.timeZone", "Asia/Hong_Kong")
spark.selectExpr("date_format(eff_dt, 'yyyyMMdd') as df_eff_dt").collect()

但在实际Cluster 去run job的时候,如果给一个eff_dt为2024-02-01T00:00:00+0800的时间,但是往往会出现df_eff_dt为20240131的日期。

解决方案

通过参考databricks的一篇对timestamp的文档介绍,在databricks3.0以后的版本,就从之前的hybrid calendar(Julian和Gregorian calendar的合并),转换成使用Proleptic Gregorian calendar为规范来生成date和timestamp。但是本身如果使用dataframe的collect()方法, spark为了兼容性问题,仍然会返回hybrid calendar(java.sql.Date and java.sql.Timestamp)。

为了解决日历问题返回的时间错误:

Java 8 API 能够通过设置spark.sql.datetime.java8API.enabled来解决时间问题。

PySpark可以采用pandas的方式,解决问题,解决function如下。

python 复制代码
spark.selectExpr("date_format(eff_dt, 'yyyyMMdd') as df_eff_dt").toPandas()['df_eff_dt']

参考内容

A Comprehensive Look at Dates and Timestamps in Apache Spark™ 3.0

相关推荐
智能零售小白白2 小时前
零售多平台商品数据标准化:从字段混乱到一键同步的技术实践
大数据·零售
龙山云仓2 小时前
No153:AI中国故事-对话毕昇——活字印刷与AI知识生成:模块化思想与信息革
大数据·人工智能·机器学习
雪兽软件2 小时前
什么是大数据?定义、类型、重要性和最佳实践
大数据
狒狒热知识2 小时前
2026年软文营销发稿平台优选指南:聚焦178软文网解锁高效传播新路径
大数据·人工智能
小王毕业啦3 小时前
2007-2024年 上市公司-投资者情绪数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·数据统计·社科数据·经管数据
百块富翁3 小时前
可管控、不重复TraceId解决方案
java·分布式·系统架构
wwj20243 小时前
红海云数字化如何赋能“十五五”人才规划高效落地
大数据·人工智能
TYFHVB123 小时前
2026工业级CRM系统选型攻略:6款主流产品深度评测与场景适配剖析
大数据·人工智能
岁岁种桃花儿3 小时前
Flink从入门到上天系列第五篇:Flink集群化部署模式
大数据·flink
AC赳赳老秦4 小时前
2026主权AI趋势:DeepSeek搭建企业自有可控AI环境,保障数据安全实战
大数据·数据库·人工智能·python·科技·rabbitmq·deepseek