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

相关推荐
AAA小肥杨3 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
爬山算法6 小时前
Redis(73)如何处理Redis分布式锁的死锁问题?
数据库·redis·分布式
IT小哥哥呀6 小时前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi7 小时前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
yumgpkpm7 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
祈祷苍天赐我java之术8 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
UMI赋能企业8 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能
TDengine (老段)8 小时前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
猫林老师10 小时前
HarmonyOS线程模型与性能优化实战
数据库·分布式·harmonyos
派可数据BI可视化11 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析