【问题标题】:Cutting timestamps into minute by minute interval per row with Pyspark使用 Pyspark 将时间戳切割成每行的每分钟间隔
【发布时间】:2020-06-13 09:25:39
【问题描述】:

我有一个 spark 数据框,它有两列:start_time 和 end_time。我想知道如何使用某种形式的舍入(在本例中取上限)将时间戳拆分并有效地将时间戳分成分钟间隔(pyspark TimestampType 中 start_time 和 end_time 之间的时间)并将其分配为名为 minutes 的新列派斯帕克?

#sample data
 val df0 = Seq(
      ("78aa", "2020-04-14", "2020-04-14 19:00:00", "2020-04-14 19:23:59"),
      ("78aa", "2020-04-14", "2020-04-14 19:24:00", "2020-04-14 19:26:59"),
      ("78aa", "2020-04-14", "2020-04-14 19:27:00", "2020-04-14 19:35:59"),
      ("78aa", "2020-04-14", "2020-04-14 19:36:00", "2020-04-14 19:55:00"),
      ("25aa", "2020-04-15", "2020-04-15 08:00:00", "2020-04-15 08:02:59"),
      ("25aa", "2020-04-15", "2020-04-15 11:03:00", "2020-04-15 11:11:59"),
      ("25aa", "2020-04-15", "2020-04-15 11:12:00", "2020-04-15 11:45:59"),
      ("25aa", "2020-04-15", "2020-04-15 11:46:00", "2020-04-15 11:47:00")
    ).toDF("id", "date", "start_time", "end_time")

这是所需的输出

      datetime  id       start_time        end_time            minutes
1  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:00:00
2  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:01:00
3  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:02:00
4  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:03:00
5  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:04:00
6  2020-04-14  78aa 2020-04-14 19:00:00 2020-04-14 19:23:59 2020-04-14 19:05:00

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql timestamp


    【解决方案1】:

    检查这是否有帮助-

    用 scala 编写,但只需少量更改即可移植到 python。

    更多解释-here

      val df0 = Seq(
          ("78aa", "2020-04-14", "2020-04-14 19:00:00", "2020-04-14 19:23:59"),
          ("78aa", "2020-04-14", "2020-04-14 19:24:00", "2020-04-14 19:26:59"),
          ("78aa", "2020-04-14", "2020-04-14 19:27:00", "2020-04-14 19:35:59"),
          ("78aa", "2020-04-14", "2020-04-14 19:36:00", "2020-04-14 19:55:00"),
          ("25aa", "2020-04-15", "2020-04-15 08:00:00", "2020-04-15 08:02:59"),
          ("25aa", "2020-04-15", "2020-04-15 11:03:00", "2020-04-15 11:11:59"),
          ("25aa", "2020-04-15", "2020-04-15 11:12:00", "2020-04-15 11:45:59"),
          ("25aa", "2020-04-15", "2020-04-15 11:46:00", "2020-04-15 11:47:00")
        ).toDF("id", "date", "start_time", "end_time")
    
        df0.withColumn("minutes",
          explode(sequence($"start_time".cast("timestamp"), $"end_time".cast("timestamp"), expr("interval 1 minute"))))
          .show(false)
    
        /**
          * +----+----------+-------------------+-------------------+-------------------+
          * |id  |date      |start_time         |end_time           |minutes            |
          * +----+----------+-------------------+-------------------+-------------------+
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:00:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:01:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:02:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:03:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:04:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:05:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:06:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:07:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:08:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:09:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:10:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:11:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:12:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:13:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:14:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:15:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:16:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:17:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:18:00|
          * |78aa|2020-04-14|2020-04-14 19:00:00|2020-04-14 19:23:59|2020-04-14 19:19:00|
          * +----+----------+-------------------+-------------------+-------------------+
          * only showing top 20 rows
          */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2021-10-18
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      相关资源
      最近更新 更多