我有两张淡褐色地图 map2 2. map2
我想加入密钥上的两张地图。
我可以在淡褐色播放中做到吗?
谢谢
答案 0 :(得分:4)
如果要在“主键”(地图中使用的实际键)上加入两个IMap
,则应使用hashJoin
管道转换。让我们从这些源阶段开始:
BatchStage<Entry<String, Person>> person = p.drawFrom(Sources.map("person"));
BatchStage<Entry<String, Employee>> employee = p.drawFrom(Sources.map("employee"));
这是加入他们的基本方式:
BatchStage<Tuple2<Person, Employee>> joined =
persons.hashJoin(employees, joinMapEntries(Entry::getKey),
(personEntry, employee) -> tuple2(personEntry.getValue(), employee));
您将获得成对的加入项(Tuple2<Person, Employee>
)。另一种常见情况是将一个项目附加到另一个项目,例如Employee
可能具有person
属性:
class Employee {
Person person;
Employee setPerson(Person person) {
this.person = person;
return this;
}
}
有了这个,你可以写
BatchStage<Employee> joined =
persons.hashJoin(employees, joinMapEntries(Entry::getKey),
(personEntry, employee) -> employee.setPerson(personEntry.getValue()));
您可以使用Hazelcast Jet以流式方式连接两张地图。查看实现自定义加入处理器的cogroup-operator
代码示例(术语“co-group”和“join”密切相关)。您将能够提供两个地图源,并且在输出流中,您将获得每个不同键的一对集合,从每个源中保存具有相同键的所有项。您可以调整它以生成成对的项目。
流媒体加入的一流支持是即将发布的Jet的计划功能。
答案 1 :(得分:0)
加入你的意思或加入你想做的操作?您可以使用具有相同密钥的2个不同映射并配置为PartitionAware,以便两个密钥都位于相同的分区/成员上(即,可以执行操作而无需额外的网络调用和额外的线数据)。 http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#data-affinity