以下是我拥有的数据示例:
Date_key UserID
20140401 a
20140402 a
20140406 a
20140407 a
20140408 a
20140409 a
20140404 b
20140408 b
20140409 b
20140414 b
20140415 b
... ...
每一行都有一个日期,用户ID对,表示该用户当天处于活动状态。用户可以出现在多个日期,日期将有多个用户 - 就像示例中一样。
我想获得连续日组的数量(即活动块)。例如,'用户a' 的此值将 2 ,因为它们在20140401和20140402(第一组连续天数)中处于活动状态。在20140402之后,他们等待了一段时间再次变得活跃(即他们在第二天没有活动)。在20140406,他们的第二个活动块开始并持续到20140409没有任何分解。对于'用户b' ,此值将 3 ,因为他们在连续三天期间一直有效:1)20140404 2)20140408,20140409 3)20140414,20140415
我使用Hive。我不确定这在Hive中是否可行,但是如果数据需要转移到RDBMS来执行此任务,我也可以这样做。非常感谢您的推荐。谢谢!
干杯
答案 0 :(得分:0)
当你使用distribute by子句时,即:.......按user_id分配按user_id排序,date_key desc ......特定用户的所有记录都将转到特定的reducer,其中然后按date_key降序对记录进行排序。这里为什么我们不编写UDF来遍历记录,并且当连续性中断时,它会将计数器的连续性增加1并将结果与user_id一起返回。