scala - Spark:错误的时间戳解析
问题描述
我正在创建以下数据框
syncs.select($"event.timestamp",to_date($"event.timestamp".cast(TimestampType))).show
这包括以下行
timestamp|to_date(CAST(`event.timestamp` AS TIMESTAMP))|
-------------+---------------------------------------------+
1589509800768| 52339-07-25|
1589509802730| 52339-07-25|
1589509809092| 52339-07-25|
1589509810402| 52339-07-25|
1589509812112| 52339-07-25|
1589509817489| 52339-07-25|
1589509818065| 52339-07-25|
1589509818902| 52339-07-25|
1589509819020| 52339-07-25|
1589509819425| 52339-07-25|
1589509819830| 52339-07-25|
基于此 1589509800768
,是 2020 年 5 月 15 日星期五 02:30:00。
我不明白为什么我会得到这些未来的日期。从时间戳到日期的转换是否也需要某种日期格式?
解决方案
Spark 需要以秒而不是毫秒为单位的纪元时间,因此您可以将其除以 1000。
scala> val values = List(1589509800768L)
values: List[Long] = List(1589509800768)
scala> val df = values.toDF()
df: org.apache.spark.sql.DataFrame = [value: bigint]
scala> df.show(false)
+-------------+
|value |
+-------------+
|1589509800768|
+-------------+
scala> df.select((col("value") / 1000 ).cast(TimestampType).as("current_time")).show(false)
+-----------------------+
|current_time |
+-----------------------+
|2020-05-14 19:30:00.768|
+-----------------------+
scala> df.select((col("value") / 1000 ).cast(TimestampType).as("current_time")).withColumn("time_utc",
| expr("""to_utc_timestamp(current_time, "PST")""")
| ).show(false)
+-----------------------+-----------------------+
|current_time |time_utc |
+-----------------------+-----------------------+
|2020-05-14 19:30:00.768|2020-05-15 02:30:00.768|
+-----------------------+-----------------------+
推荐阅读
- kotlin - 将带有后台任务的功能从主要活动转移到它自己的单独类中
- python - 循环迭代,返回最佳实践
- firebase - Firestore 中的 getDocuments() 和 snapshots() 有什么区别?
- javascript - lodash sortByOrder 没有按预期工作?
- mysql - 将一个巨大的选择查询分成几部分有意义吗?
- r - 根据特定列中唯一数量的值添加列
- react-native - 最新版本的 react-native 和 AsyncStorage 丢失数据
- python - Python Dataframe 中日期在 dd-mm-yyyy 中的日期差异
- r - modelssummary/kable 同名模型的额外回归表
- cloud - IBM Cloud 目前无法创建帐户