我在 hive 里看到这样的景象:
id sequencenumber appname
242539622 1 A
242539622 2 A
242539622 3 A
242539622 4 B
242539622 5 B
242539622 6 C
242539622 7 D
242539622 8 D
242539622 9 D
242539622 10 B
242539622 11 B
242539622 12 D
242539622 13 D
242539622 14 F
我希望每个id都有以下视图:
id sequencenumber appname appname_c
242539622 1 A A
242539622 2 A A
242539622 3 A A
242539622 4 B B_1
242539622 5 B B_1
242539622 6 C C
242539622 7 D D_1
242539622 8 D D_1
242539622 9 D D_1
242539622 10 B B_2
242539622 11 B B_2
242539622 12 D D_2
242539622 13 D D_2
242539622 14 F F
或者任何与此接近的东西,可以识别序列中给定事件的再次出现。
我的最终目标是计算在每组事件中花费的时间(或者在markov建模的上下文中,如果您愿意的话,计算状态),同时考虑是否存在任何循环。例如,在上面的示例中,花费在b_1中的时间可以与b_2非常相似。
我已经在hive(link)中搜索了窗口函数,但我认为它们不能像r/python那样进行行比较。
2条答案
按热度按时间mbyulnm01#
使用配置单元窗口函数的解决方案。我用你的数据来测试它,删除
your_table
用你的table代替。结果如预期。结果:
jxct1oxe2#
你需要做两个窗口函数来实现这个结果。
使用pyspark并假设
df
是您的Dataframe: