0

如何在java中使用hadoop mapreduce来实现它?

在 hive 中,我有一个包含很多列的表,其中两个是 begin_time,end_time。

我需要计算每次的数字

一张桌子是这样的:

begin_time                  end_time
2011.04.26 10:19:06^A2011.04.26 10:20:22
2011.04.26 10:19:08^A2011.04.26 10:21:49
2011.04.26 10:19:08^A2011.04.26 11:18:46
2011.04.26 10:19:09^A2011.04.26 12:08:36
2011.04.26 10:19:09^A2011.04.26 11:00:16
2011.04.26 10:19:11^A2011.04.26 10:19:17
2011.04.26 10:19:12^A2011.04.26 10:46:21
2011.04.26 10:19:13^A2011.04.26 10:55:43
2011.04.26 10:19:17^A2011.04.26 10:19:41
2011.04.26 10:19:18^A2011.04.26 10:34:41

我想要的结果是在特定时间有多少人。

例如,2011.04.26 10:19:08,19:06 有 3 个访客,19:08 有 2 个访客。

和 2011.04.26 10:19:18 是 9,当然是 10,但在 2011.04.26 10:19:17 离开

片的期望结果是

2011.04.26 10:19:06 1
2011.04.26 10:19:08 3
2011.04.26 10:19:09 5
2011.04.26 10:19:11 6
2011.04.26 10:19:12 7
2011.04.26 10:19:13 8
2011.04.26 10:19:17 9
2011.04.26 10:19:18 9

非常感谢和欢迎任何帮助。

4

1 回答 1

0

在映射器中,您将每条记录转换为两条记录 - 一条用于记录的开始时间,一条用于结束时间。因此,如果您只有一个减速器,您会将它们排序为:

Time                Begin/End
2011.04.26 10:19:06 B
2011.04.26 10:19:08 B
2011.04.26 10:19:08 B
2011.04.26 10:19:09 B
2011.04.26 10:19:09 B
2011.04.26 10:19:11 B
2011.04.26 10:19:12 B
2011.04.26 10:19:13 B
2011.04.26 10:19:17 E
2011.04.26 10:19:17 B
2011.04.26 10:19:18 B
2011.04.26 10:19:41 E
2011.04.26 10:20:22 E
2011.04.26 10:21:49 E
2011.04.26 10:34:41 E
2011.04.26 10:46:21 E
2011.04.26 10:55:43 E
2011.04.26 11:00:16 E
2011.04.26 11:18:46 E
2011.04.26 12:08:36 E

并且可以按此顺序处理它们,每次遇到“B”时增加数字,遇到“E”时减少数字。要获得结果,您需要在时间变化时从减速器发出记录,并且该时间至少有一个“B”。

Time                Begin/End      N        Emit
2011.04.26 10:19:06 B              1          1
2011.04.26 10:19:08 B              2
2011.04.26 10:19:08 B              3          3
2011.04.26 10:19:09 B              4
2011.04.26 10:19:09 B              5          5
2011.04.26 10:19:11 B              6          6
2011.04.26 10:19:12 B              7          7
2011.04.26 10:19:13 B              8          8
2011.04.26 10:19:17 E              7
2011.04.26 10:19:17 B              8          8
2011.04.26 10:19:18 B              9          9
2011.04.26 10:19:41 E              8
2011.04.26 10:20:22 E 7 2011.04.26 10:21:49 E 6 2011.04.26 10:34:41 E 5 2011.04.26 10:46:21 E 4 2011.04.26 10:55:43 E 3 2011.04.26 11:00:16 E 2 2011.04.26 11:18:46 E 1 2011.04.26 12:08:36 E 0

如果您提前知道没有事件的时间,您可以创建分区器,它将数据拆分为独立的集合,您将能够使用多个减速器。

于 2013-05-24T18:21:57.283 回答