如何解决在 Hazelcast Jet 中执行左、右和内连接
我正在开发 Hazelcast jet 应用程序,我尝试使用左联接、右联接或内联接来联接两个源,但我被困在下面:
这是我的代码:
BatchStage<Map<String,Object>> batch1= pipeline.readFrom(companyListBatchSource);
BatchStage<Map<String,Object>> batch2= pipeline.readFrom(employeeListBatchSource);
//Getting group by key
BatchStageWithKey<Map<String,Object>,Object> jdbcGroupByKey = batch1.groupingKey(a -> a.getSource1().get(col1));
BatchStageWithKey<Map<String,Object> fileGroupByKey = batch2.groupingKey(b -> b.getSource1().get(col2));
//trying to join but not sure what exactly is happening.
BatchStage<Entry<Object,Tuple2<List<Map<String,Object>>,List<Map<String,Object>>>>> d = jdbcGroupByKey.aggregate2(AggregateOperations.toList(),fileGroupByKey,AggregateOperations.toList());
从上面的代码如何获得BatchStage格式的数据?我们如何在这里应用不同类型的连接?
解决方法
您的 node_modules
代表单个项目,我们称整个类型为 Map<String,Object>
。因此,您的输入是 E
类型的两个流:公司和员工。
JOIN 的结果不是 E
类型,而是一般而言,E
。
从这里开始,详细信息取决于联接每一侧的基数。如果在双方都按公司分组,则应该有一对多关联和结果类型 Tuple2<List<E>,List<E>>
。在这种情况下,将 Tuple2<E,List<E>>
用于公司流,这将导致单个项目并且联接的结果将作为 AggregateOperations.pickAny()
出现。这相当于 LEFT OUTER JOIN。如果您过滤掉员工列表为空的所有结果,则会从中获得内部联接:Entry<Object,Tuple2<List<E>,List<E>>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。