java - 在hadoop中进行集合成员资格测试的最佳方法是什么?

标签 java hadoop amazon-web-services elastic-map-reduce

我正在使用hadoop为我的应用程序处理一系列分析记录。我想根据我在他们的流中看到的事件对用户进行分类,然后在以后再次迭代该流时在以后的阶段中使用该信息。例如,假设我想为从未激活我的应用程序的所有用户生成数据。

在我的第一个回合reduce中,我可以反复遍历流来确定谁永远不会激活。

问题是,我应该将“用户X从未激活”的数据放在哪里,以便下次在第二轮映射器中对流进行迭代时可以查看该事实?我有一些想法,但是我不确定哪种方法是正确的:

  • 从我的第一轮 reducer 输出一个包含用户列表的辅助文件,在第二轮中读取它-如何避免将整个文件读入内存,如何处理来自多个前端的多个辅助文件 reducer (是否有一种很好的方式来分类/合并副文件)?
  • 将用户的所有事件缓冲在我的reducer的内存中,以便在将它们输出到磁盘之前,可以将它们全部标记为“未激活”-感觉有些棘手。

  • 是那些“正确的方法”之一,还有我遗漏的另一种方法吗?

    我正在使用AWS Elastic MapReduce。

    最佳答案

    使用mapreduce相当容易。

    映射器:将每个事件都作为键,将用户作为值。

    例如:

    USER_NEVER_ACTIVATED_APP : x
    USER_PAID_FOR_APP : x
    USER_NEVER_ACTIVATED_APP : y
    

    reducer :您基本上可以为每个事件获取每个用户。
    在这种情况下,将是这样的:
    USER_NEVER_ACTIVATED_APP : x,y
    USER_PAID_FOR_APP : x
    

    这样,您甚至不需要第二个映射器或工作。

    关于java - 在hadoop中进行集合成员资格测试的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451409/

    相关文章:

    hadoop - 错误2998:未处理的内部错误。 null-Apache Pig

    java - 如何在corda中创建自定义内联子流,例如CollectSignaturesFlow/SignTransactionFlow

    java - 在 JavaFX WebEngine 上设置代理?

    java - 运行一个由try block 组成但没有catch或final子句的程序

    java - 从 reducer 中将列数据作为行发出

    hadoop - 得到 : permission denied in hadoop

    java 。隐式 super 构造函数 Settore() 未定义。必须显式调用另一个构造函数

    amazon-web-services - 云信息 : How to make resources configurable as per user input

    python - 错误解析参数 '--zip-file' : Unable to load paramfile fileb://app. zip: [Errno 2] No such file or directory: 'app.zip'

    amazon-web-services - 使用 Dockerfile 以及在容器运行后共享 Docker 容器中的目录