1

我有两张榛树地图 1.map2 2.map2

我想在钥匙上加入两张地图。

我可以在榛树里做吗?

谢谢

4

2 回答 2

6

Jet 0.7 的更新答案:

如果您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()));

Jet 0.4 的旧答案:

您可以使用 Hazelcast Jet 以流式方式连接两个地图。查看实现cogroup-operator自定义加入处理器的代码示例(术语“co-group”和“join”密切相关)。您将能够提供两个地图源,并且在输出流中,您将获得每个不同键的一对集合,其中包含来自每个源的具有相同键的所有项目。您也可以对其进行调整以生成成对的项目。

对流加入的一流支持是即将发布的 Jet 计划的一项功能。

于 2017-08-25T09:03:49.510 回答
0

加入是什么意思或者你想通过加入做什么操作?您可以拥有 2 个具有相同键的不同映射并将其配置为 PartitionAware,以便两个键都位于相同的分区/成员上(即可以执行操作而无需额外的网络调用和额外的有线数据)。 http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#data-affinity

于 2017-08-24T23:43:12.040 回答