scala - Scala-根据列值的时间戳计算总时间
问题描述
有一个 Spark 数据框,其中有一列以毫秒为单位给出状态和另一列时间。我想知道给定状态作为新数据帧的总时间是多少。
当前数据框:
TimeStamp Status
120 Running
200 Paused
330 Running
420 Paused
450 Running
600 Stopped
现在手动观察“暂停”状态的持续时间为 200->330 和 420->450。总共 160 毫秒。所以新的数据帧将是
TotalTime Status
160 Paused
Scala 中获取此代码的代码是什么
解决方案
您可以通过以下方式使用 spark-sql 完成以下操作
- 创建数据的临时视图,例如
my_df.createOrReplaceTempView("my_table")
- 在您的 spark 会话上运行以下命令
result_df = sparkSession.sql("<insert sql below here>")
WITH durations AS (
SELECT
Status,
TimeStamp,
((LEAD(TimeStamp,1,TimeStamp) OVER (Order by TimeStamp)) - TimeStamp) as duration
FROM
my_table
)
SELECT
Status,
SUM(duration) as TotalTime
FROM
durations
GROUP BY
Status
推荐阅读
- javascript - 订阅函数中未定义的组件变量
- javascript - 元素的值被 JavaScript 改变了两次
- azure - 如何知道 Azure PowerShell 中附加到 VM 的子网名称?
- java - 如何在单击按钮时更改列表项的背景颜色?
- java - Angular Post 请求进入挂起状态并且没有命中服务器
- linux - 列出文件夹中的基本文件,其中包含多个带有日期戳的文件版本
- java - 通过登录页面以使用 JSoup 进行网络爬虫
- recursion - 创建交错元素列表:Prolog
- sql - 将列移动到行
- c# - 使用 Epplus 生成带有嵌套列表的 xlsx