如何将流数据与Dataflow / Beam中的大历史数据集结合在一起

弗洛里安

我正在研究通过Google Dataflow / Apache Beam处理来自Web用户会话的日志,并且需要将用户日志的输入(流式传输)与上个月用户会话的历史记录结合起来。

我研究了以下方法:

  1. 使用30天固定的窗口:最有可能将一个大窗口容纳进内存,并且我不需要更新用户的历史记录,只需参考它即可
  2. 使用CoGroupByKey来连接两个数据集,但是两个数据集必须具有相同的窗口大小(https://cloud.google.com/dataflow/model/group-by-key#join),这在我看来并不正确案例(24小时vs 30天)
  3. 使用侧输入检索用户的会话历史对于一个给定elementprocessElement(ProcessContext processContext)

我的理解是,通过加载的数据.withSideInputs(pCollectionView)需要放入内存中。我知道我可以将单个用户的所有会话历史记录存储到内存中,但不能将所有会话历史记录存储到内存中

我的问题是,是否有一种方法可以从仅与当前用户会话相关的侧面输入中加载/流式传输数据?

我正在想象一个parDo函数,该函数将通过指定用户的ID从侧面输入中加载用户的历史会话。但是只有当前用户的历史记录会话可以容纳在内存中。通过侧面输入加载所有历史记录会话将太大。

一些伪代码来说明:

public static class MetricFn extends DoFn<LogLine, String> {

    final PCollectionView<Map<String, Iterable<LogLine>>> pHistoryView;

    public MetricFn(PCollectionView<Map<String, Iterable<LogLine>>> historyView) {
        this.pHistoryView = historyView;
    }

    @Override
    public void processElement(ProcessContext processContext) throws Exception {
        Map<String, Iterable<LogLine>> historyLogData = processContext.sideInput(pHistoryView);

        final LogLine currentLogLine = processContext.element();
        final Iterable<LogLine> userHistory = historyLogData.get(currentLogLine.getUserId());
        final String outputMetric = calculateMetricWithUserHistory(currentLogLine, userHistory);
        processContext.output(outputMetric);
    }
}
丹尼尔姆

目前尚没有一种方法可以访问流中的每个键的侧面输入,但是正如您所描述的,它绝对有用,这是我们正在考虑实现的方法。

一种可能的解决方法是使用侧面输入来分配指向实际会话历史记录的指针。生成24小时会话历史记录的代码可以将它们上传到GCS / BigQuery / etc,然后将位置作为侧面输入发送到加入代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:如何将几个数据集结合在一起

来自分类Dev

如何将数据框总结为与ID结合在一起的列表?

来自分类Dev

如何将两个数据框与R中的项目数量结合在一起?

来自分类Dev

如何将我数据库的AsyncTask与Android中的Google Map结合在一起?

来自分类Dev

如何将熊猫中的数据框组合在一起?

来自分类Dev

如何使用python将头文件与数据文件结合在一起?

来自分类Dev

如何将列与R中的条件结合在一起?

来自分类Dev

将吸气剂结合在一起

来自分类Dev

在R中将几个数据框结合在一起

来自分类Dev

将多个标签与Google表格中的常用表格结合在一起

来自分类Dev

在TypeScript 0.9中将外部模块与内部模块结合在一起

来自分类Dev

将多个标签与Google表格中的常用表格结合在一起

来自分类Dev

如何将pandas数据框中的列与重复的名称组合在一起?

来自分类Dev

在hapi / joi中。如何将两种不同的模式验证结合在一起?

来自分类Dev

如何将文本大小调整与页脚中的加粗结合在一起?

来自分类Dev

如何将手势和动画结合在一起

来自分类Dev

如何将事件侦听器与事件的“询问”结合在一起?

来自分类Dev

如何将原位转换和复制转换结合在一起?

来自分类Dev

如何将镜头和函子结合在一起?

来自分类Dev

如何将LINQ组和排序与父子表结合在一起?

来自分类Dev

如何将python asyncio与线程结合在一起?

来自分类Dev

如何将DAO和GUI与MVC结合在一起

来自分类Dev

如何将.toggleClass()与.appendTo()结合在一起?

来自分类Dev

如何将Axios调用循环与等待功能结合在一起?

来自分类Dev

如何将这两个查询结合在一起?(MySQL)

来自分类Dev

如何将RequireJS路径和require-css结合在一起?

来自分类Dev

如何将Bash的流程替换与HERE文档结合在一起?

来自分类Dev

如何将DataTables与其他匹配器结合在一起?

来自分类Dev

如何将NavigationDrawerPageSlidingTabStrip与StickyListHeaders库结合在一起?

Related 相关文章

  1. 1

    R:如何将几个数据集结合在一起

  2. 2

    如何将数据框总结为与ID结合在一起的列表?

  3. 3

    如何将两个数据框与R中的项目数量结合在一起?

  4. 4

    如何将我数据库的AsyncTask与Android中的Google Map结合在一起?

  5. 5

    如何将熊猫中的数据框组合在一起?

  6. 6

    如何使用python将头文件与数据文件结合在一起?

  7. 7

    如何将列与R中的条件结合在一起?

  8. 8

    将吸气剂结合在一起

  9. 9

    在R中将几个数据框结合在一起

  10. 10

    将多个标签与Google表格中的常用表格结合在一起

  11. 11

    在TypeScript 0.9中将外部模块与内部模块结合在一起

  12. 12

    将多个标签与Google表格中的常用表格结合在一起

  13. 13

    如何将pandas数据框中的列与重复的名称组合在一起?

  14. 14

    在hapi / joi中。如何将两种不同的模式验证结合在一起?

  15. 15

    如何将文本大小调整与页脚中的加粗结合在一起?

  16. 16

    如何将手势和动画结合在一起

  17. 17

    如何将事件侦听器与事件的“询问”结合在一起?

  18. 18

    如何将原位转换和复制转换结合在一起?

  19. 19

    如何将镜头和函子结合在一起?

  20. 20

    如何将LINQ组和排序与父子表结合在一起?

  21. 21

    如何将python asyncio与线程结合在一起?

  22. 22

    如何将DAO和GUI与MVC结合在一起

  23. 23

    如何将.toggleClass()与.appendTo()结合在一起?

  24. 24

    如何将Axios调用循环与等待功能结合在一起?

  25. 25

    如何将这两个查询结合在一起?(MySQL)

  26. 26

    如何将RequireJS路径和require-css结合在一起?

  27. 27

    如何将Bash的流程替换与HERE文档结合在一起?

  28. 28

    如何将DataTables与其他匹配器结合在一起?

  29. 29

    如何将NavigationDrawerPageSlidingTabStrip与StickyListHeaders库结合在一起?

热门标签

归档