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

相关推荐
Jerry.张蒙8 小时前
AI工具Opencode助力SAP提质增效实践
大数据·运维·服务器·人工智能·运维开发
Data-Miner16 小时前
集团数字化转型大数据平台整体建设方案
大数据
guslegend16 小时前
大模型驱动大数据SRE智能运维
大数据·运维
跨境小彭18 小时前
2026 Temu 合规新玩法,凌风 ERP 优化 POD 运营效率
大数据·跨境电商·temu·shein
weixin_3975740918 小时前
从“点状试点“到“全面智能化“:制造企业AI落地的现实路径
大数据·人工智能·制造
志栋智能18 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
Old Uncle Tom19 小时前
循环工程(loop engineering)
大数据
跨境数据猎手19 小时前
淘宝大数据技术在电商行业的应用
大数据
阿部多瑞 ABU19 小时前
铁三角:泛二次元奶头乐经济的结构分析及其人口后果
大数据·人工智能
吴卫斌19 小时前
波动率控制仓位系列(一):满仓轮动的“过山车”困境
大数据·python·股票·量化交易