提取会话时保留元素数据

时间:2017-04-07 14:10:47

标签: python google-cloud-dataflow apache-beam

top wikipedia sessions example类似,我有以下测试数据

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'})
  ]

我想将数据集拆分为每username个会话,然后为每个用户会话计算用户操作。因此,对于之前的数据集和一小时最大间隙(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',
  ]

与维基百科会话示例相反,我需要保留完整的元素数据,而不仅仅是密钥,以便在我的自定义组合函数中使用。

1 个答案:

答案 0 :(得分:0)

您应该能够使用计数字典作为累加器来编写一个CombineFn来计算每种类型的操作数。然后,您可以在由用户ID使用该组合器键入的集合中使用会话窗口。

请参阅Combine Fns上的Beam编程指南部分,了解如何编写一个。