如何将posix时间转换为spark2中的常规日期和时间?

x6492ojm  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(278)

我是spark&pyspark的新手,刚刚开始使用spark 2.0。我正在尝试将服务器上的时间戳(posix/unix)转换为常规日期(例如yyyy-mm-dd&time),但无法这样做。我使用了以下两个命令:

df_new = df.withColumn('fromTimestamp', f.from_unixtime(df['timestamp'], 'yyyy-mm-dd HH:mm:ss'))

df.select("timestamp",from_unixtime(f.col("timestamp"))).show()

其中f是pyspark.sql.functions api的别名。它们都产生以下结果:

|   @RequiredResult  |   ActualResult     |
+--------------------+--------------------+
|2020-06-01 00:00:03 |52385-52-27 00:52:14|
|2020-06-01 00:00:02 |52385-35-27 00:35:19|

+--------------------+--------------------+

此外,我希望聚合时间间隔(到30分钟或60分钟)的持续时间。有什么线索知道怎么做吗?

dzhpxtsq

dzhpxtsq1#

unix时间戳定义为自1970年1月1日以来的秒数。但是,有些类unix系统使用自该日期起的毫秒数,产生的值高出1000倍。
例如日期 2020-06-01 00:00:03 将由时间戳表示 1590962403 . 如果时间戳 1590962403000 如果使用,则日期为52385年:

spark.sql("""select from_unixtime(1590962403) as seconds, 
                    from_unixtime(1590962403000) as ms""")\
        .show(truncate=False)

印刷品

+-------------------+---------------------+
|seconds            |ms                   |
+-------------------+---------------------+
|2020-06-01 00:00:03|+52385-08-04 18:50:00|
+-------------------+---------------------+

所以你应该划分 timestamp 应用前按1000列 from_unixtime .

相关问题