【问题标题】:Convert date time to unix_timestamp Scala将日期时间转换为 unix_timestamp Scala
【发布时间】:2020-12-10 20:55:23
【问题描述】:

我需要从 Spark 数据帧中获取最小值并对其进行转换。 目前,我只是获取这个值并使用 DateTime 对其进行转换,但是,我需要它以 unix_timestamp 格式作为结果。那么如何使用 Scala 函数或 Spark 函数将 DateTime 转换为 unix_timestamp?

这是我目前返回 DateTime 的当前代码:

val minHour = new DateTime(df.agg(min($"event_ts"))
          .as[Timestamp].collect().head))
          .minusDays(5)
          .withTimeAtStartOfDay())

我也尝试过使用 Spark 函数,但我无法将时间戳切换为一天中的开始时间(这可以使用 DateTime withTimeAtStartOfDay 函数来实现):

val minHour = new DateTime(df.agg(min($"event_ts").alias("min_ts"))
.select(unix_timestamp(date_sub($"min_ts", 5)))
.as[Long].collect().head)

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    date_sub 会将您的时间戳转换为日期,因此时间将自动转移到一天的开始。

    df.show
    +-------------------+----------+
    |           event_ts|event_hour|
    +-------------------+----------+
    |2017-05-01 00:22:01|1493598121|
    |2017-05-01 00:22:08|1493598128|
    |2017-05-01 00:22:01|1493598121|
    |2017-05-01 00:22:06|1493598126|
    +-------------------+----------+
    
    df.agg(
        min($"event_ts").alias("min_ts")
    ).select(
        unix_timestamp(date_sub($"min_ts", 5)).alias("min_ts_unix")
    ).withColumn(
        "min_ts", $"min_ts_unix".cast("timestamp")
    ).show
    +-----------+-------------------+
    |min_ts_unix|             min_ts|
    +-----------+-------------------+
    | 1493164800|2017-04-26 00:00:00|
    +-----------+-------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2020-11-06
      • 2012-11-02
      • 2012-04-04
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多