我有两张榛树地图 1.map2 2.map2
我想在钥匙上加入两张地图。
我可以在榛树里做吗?
谢谢
如果您IMap
在它们的“主键”(映射中使用的实际键)上加入两个 s,则应该使用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 计划的一项功能。
加入是什么意思或者你想通过加入做什么操作?您可以拥有 2 个具有相同键的不同映射并将其配置为 PartitionAware,以便两个键都位于相同的分区/成员上(即可以执行操作而无需额外的网络调用和额外的有线数据)。 http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#data-affinity