计算 Hive/Spark/SQL 中的每小时进程计数

Posted

技术标签:

【中文标题】计算 Hive/Spark/SQL 中的每小时进程计数【英文标题】:Calculate hourly count of process in Hive/Spark/SQL 【发布时间】:2018-08-23 17:55:07 【问题描述】:

我正在尝试计算每个小时槽中运行的进程数。我的输入数据集如下所示。

process_id      start_time              end_time
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00

这是我试图从上述输入数据集中获得的输出。根据 start_time 和 end_time 值将每个进程标记到适当的每小时时间段。

process_id      start_time              end_time                hour_slots
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00     00-01
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00     01-02
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     00-01
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     00-01
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     02-03
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00     02-03
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00     03-04
NULL            NULL                    NULL                    05-06
NULL            NULL                    NULL                    06-07
NULL            NULL                    NULL                    07-08
NULL            NULL                    NULL                    08-09
NULL            NULL                    NULL                    09-10
NULL            NULL                    NULL                    10-11
NULL            NULL                    NULL                    11-12
NULL            NULL                    NULL                    12-13
NULL            NULL                    NULL                    13-14
NULL            NULL                    NULL                    14-15
NULL            NULL                    NULL                    15-16
NULL            NULL                    NULL                    16-17
NULL            NULL                    NULL                    17-18
NULL            NULL                    NULL                    18-19
NULL            NULL                    NULL                    19-20
NULL            NULL                    NULL                    20-21
NULL            NULL                    NULL                    21-22
NULL            NULL                    NULL                    22-23
NULL            NULL                    NULL                    23-00

我们如何在 Hive 中实现这个结果?我坚持根据 start_time 和 end_time 为每个 process_id 复制行。如果结束时间在多个小时窗口中重叠,则应使用相应的 hour_slots 生成每个新行。任何帮助或建议表示赞赏。谢谢!

【问题讨论】:

hour_slots的逻辑是什么 hour_slots 分为 24 (0-23)。每个小时都属于一个单独的分区槽 Hos 是 hours_slot,与 start_time 和 end_time 相关。基于此,我们可以构建查询... 【参考方案1】:

我认为您想要的是 hour_slots 中的开始时间和结束时间的小时。 hour_slots 是通过从开始时间和结束时间中提取小时并将它们连接在一起来计算的。

hive> select pid,start_time,end_time,concat((split((split(start_time,' ')[1]),':')[0]),'-',(split((split(end_time,' ')[1]),':')[0])) hour_slots from test;
OK
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00     00-00
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00     01-00

【讨论】:

感谢您尝试这个。但这不是我要找的。请再看一遍问题。

以上是关于计算 Hive/Spark/SQL 中的每小时进程计数的主要内容,如果未能解决你的问题,请参考以下文章

Flume+Spark+Hive+Spark SQL离线分析系统

如何引用列中的第一个非空字符串 - Cloudera Impala / Apache Hive / Spark SQL

无法从 impala/hive/spark sql 访问“spark 注册表”

通过 squirrel sql 连接到 hive/spark sql 时读取超时

将数据写入 Hive Spark SQL 时出现 ArrayIndexOutOfBoundsException 异常

Hive/Spark SQL 查询方法