Python 提取会话时保留元素数据
与此类似,我有以下测试数据Python 提取会话时保留元素数据,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,与此类似,我有以下测试数据 EDITS = [ json.dumps({'timestamp': 0, 'username': 'user1', 'action': 'a'}), json.dumps({'timestamp': 1, 'username': 'user1', 'action': 'b'}), json.dumps({'timestamp': 20, 'username': 'user1', 'action': 'a'}), jso
EDITS = [
json.dumps({'timestamp': 0, 'username': 'user1', 'action': 'a'}),
json.dumps({'timestamp': 1, 'username': 'user1', 'action': 'b'}),
json.dumps({'timestamp': 20, 'username': 'user1', 'action': 'a'}),
json.dumps({'timestamp': 132, 'username': 'user2', 'action': 'a'}),
json.dumps({'timestamp': 500, 'username': 'user2', 'action': 'b'}),
json.dumps({'timestamp': 3601, 'username': 'user2', 'action': 'b'}),
json.dumps({'timestamp': 3602, 'username': 'user2', 'action': 'a'}),
json.dumps({'timestamp': 8004, 'username': 'user2', 'action': 'a'}),
json.dumps({'timestamp': 9320, 'username': 'user1', 'action': 'b'})
]
我想将数据集按用户名
划分为会话,然后针对每个用户会话统计用户操作。因此,对于上一个数据集和一小时最大间隔(3600秒),我希望得到以下结果:
EXPECTED = [
'user1 : [0.0, 3620.0), a: 2, b: 1',
'user2 : [132.0, 7202.0), a: 2, b: 2',
'user2 : [8004.0, 11604.0), a: 1, b: 0',
'user1 : [9320.0, 12920.0), a: 0, b: 1',
]
与wikipedia会话示例相反,我需要保留完整的元素数据,而不仅仅是密钥,以便在自定义组合器函数中使用。您应该能够编写一个
CombineFn
,使用计数字典作为累加器,对每种类型的操作数进行计数。然后,您可以在由用户ID和该组合器设置密钥的集合中使用会话窗口
有关如何编写光束编程的想法,请参阅上的光束编程指南部分