输入DF:
main_id sub_id time
1 . 11 . 12:00
1 . 12 1:00
1 . 12 . 3:00
1 . 12 . 5:00
1 . 13 . 7:00
1 . 13 . 8:00
2 . 21 . 12:00
2 . 21 5:00
我试图找到运行时间戳的差异就main_id
输出DF:
main_id sub_id . time diff
1 . 11 . 12:00 null
1. 12 . 1:00 . 1
1 . 12 . 3:00 . 2
1 . 12 . 5:00 . 2
1 . 13 . 7:00 . 2
1 . 13 . 8:00 . 1
2 . 21 . 12:00 . null
2 . 21 . 5:00 . 5
已尝试的代码:
val needed_window = Window.partitionBy($"main_id").orderBy($"main_id")
val diff_time = diff($"time").over(partitionWindow)
df.select($"*", diff_time as "time_diff").show
我得到的差异函数的错误,有一种方法来实现这一点。任何建议请。
假设您的time
列的类型为Timestamp
,您可以使用unix_Timestamp
和滞后窗口函数计算当前行和前一行之间的time
差。
import java.sql.Timestamp
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window
val df = Seq(
(1, 11, Timestamp.valueOf("2018-06-01 12:00:00")),
(1, 12, Timestamp.valueOf("2018-06-01 13:00:00")),
(1, 12, Timestamp.valueOf("2018-06-01 15:00:00")),
(1, 12, Timestamp.valueOf("2018-06-01 17:00:00")),
(1, 13, Timestamp.valueOf("2018-06-01 19:00:00")),
(1, 13, Timestamp.valueOf("2018-06-01 20:00:00")),
(2, 21, Timestamp.valueOf("2018-06-01 12:00:00")),
(2, 21, Timestamp.valueOf("2018-06-01 17:00:00"))
).toDF("main_id", "sub_id", "time")
val window = Window.partitionBy($"main_id").orderBy($"main_id")
df.withColumn("diff",
(unix_timestamp($"time") - unix_timestamp(lag($"time", 1).over(window))) / 3600.0
).show
// +-------+------+-------------------+----+
// |main_id|sub_id| time|diff|
// +-------+------+-------------------+----+
// | 1| 11|2018-06-01 12:00:00|null|
// | 1| 12|2018-06-01 13:00:00| 1.0|
// | 1| 12|2018-06-01 15:00:00| 2.0|
// | 1| 12|2018-06-01 17:00:00| 2.0|
// | 1| 13|2018-06-01 19:00:00| 2.0|
// | 1| 13|2018-06-01 20:00:00| 1.0|
// | 2| 21|2018-06-01 12:00:00|null|
// | 2| 21|2018-06-01 17:00:00| 5.0|
// +-------+------+-------------------+----+
问题内容: 我在一个MySQL数据库表上工作,该表的列包含我对其他主机执行ping操作时的时间戳记(例如2014-09-16 09:08:05)。我的问题是如何在几分钟内计算出针对特定主机的第一次ping和最后一次ping之间的差异?另外,如何为上述差异的开始和结束指定不同的时间戳(而不是第一次和最后一次ping)。这是表格的示例: 我希望我已经对自己的解释足够清楚。 问题答案: 您可以使用本机的
问题内容: 如何获得几天内两个时间戳之间的差异?我应该为此使用datetime列吗? 我将专栏切换为日期时间。简单的减法似乎并没有在几天内给我带来结果。 我不认为是几秒钟,因为当我将一天中的秒数除以(86,400)时,我不会得到一个明智的答案: 问题答案: 如果您乐于忽略列中的时间部分,则DATEDIFF()会为您提供以天为单位的时差。
我将startdate和endDate作为用户的输入,将DateTime作为Flutter(Dart)中的datatype。这些字段将以时间戳格式存储在Firestore中。现在我们需要在客户端显示endDate和startDate的差异,这可以是一个实时计时器,格式为“13小时45分钟”,然后在一些分钟后,它应该是“13小时42分钟”。
问题内容: 我有一个要求,我必须以小时为单位获得两个时间戳记的时差,然后才求出小时数的平均值。 我正在使用下面的查询来查找两个时间戳的差异,但它没有给出确切的结果,而是给出了近似的结果。我们还有其他解决方案吗?我的两个时间戳为(LAST_MODIFIED_DATETIME-2016-11-30 15:39:01.131 CREATE_DATETIME-2016-07-01 17:25:52.375
问题内容: 我正在尝试编写一个在Oracle数据库上运行的查询。表ActionTable包含actionStartTime和actionEndTime列。我需要找出完成超过1小时的操作。 actionStartTime和actionEndTime属于时间戳类型 我有一个查询,它为我提供了执行每个操作所需的时间: 我的子句将只返回耗时超过1小时的操作,那是什么呢? 问题答案: 减去两个时间戳将返回一
本文向大家介绍Android进阶之使用时间戳计算时间差,包括了Android进阶之使用时间戳计算时间差的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android使用时间戳计算时间差的具体代码,供大家参考,具体内容如下 因当前项目需要计算时间差,进行数据处理,所以在Csdn上找了一下,之后修修补补是可以用的,建议大家如果用到项目中的话,可能需要把老的时间戳或者时间format存储在