Search in sources :

Example 11 with ItemsByTag

use of com.hazelcast.jet.datamodel.ItemsByTag in project hazelcast-jet by hazelcast.

the class HashJoinP method tryProcess0.

@Override
@SuppressWarnings("unchecked")
protected boolean tryProcess0(@Nonnull Object item) {
    E0 e0 = (E0) item;
    ordinal0consumed = true;
    if (tags.isEmpty()) {
        return tryEmit(keyFns.size() == 2 ? mapToOutputBiFn.apply(e0, lookupJoined(1, e0)) : mapToOutputTriFn.apply(e0, lookupJoined(1, e0), lookupJoined(2, e0)));
    }
    ItemsByTag map = new ItemsByTag();
    for (int i = 1; i < keyFns.size(); i++) {
        map.put(tags.get(i), lookupJoined(i, e0));
    }
    return tryEmit(mapToOutputBiFn.apply(e0, map));
}
Also used : ItemsByTag(com.hazelcast.jet.datamodel.ItemsByTag)

Example 12 with ItemsByTag

use of com.hazelcast.jet.datamodel.ItemsByTag in project hazelcast-jet-reference-manual by hazelcast.

the class BuildComputation method s11.

static void s11() {
    // tag::s11[]
    Pipeline p = Pipeline.create();
    // The stream to be enriched: trades
    StreamStage<Trade> trades = p.drawFrom(Sources.mapJournal("trades", mapPutEvents(), mapEventNewValue(), START_FROM_CURRENT));
    // The enriching streams: products, brokers and markets
    BatchStage<Entry<Integer, Product>> prodEntries = p.drawFrom(Sources.map("products"));
    BatchStage<Entry<Integer, Broker>> brokEntries = p.drawFrom(Sources.map("brokers"));
    BatchStage<Entry<Integer, Market>> marketEntries = p.drawFrom(Sources.map("markets"));
    // Obtain a hash-join builder object from the stream to be enriched
    StreamHashJoinBuilder<Trade> builder = trades.hashJoinBuilder();
    // Add enriching streams to the builder
    Tag<Product> productTag = builder.add(prodEntries, joinMapEntries(Trade::productId));
    Tag<Broker> brokerTag = builder.add(brokEntries, joinMapEntries(Trade::brokerId));
    Tag<Market> marketTag = builder.add(marketEntries, joinMapEntries(Trade::marketId));
    // Build the hash join pipeline
    StreamStage<Tuple2<Trade, ItemsByTag>> joined = builder.build(Tuple2::tuple2);
    // end::s11[]
    // tag::s12[]
    StreamStage<String> mapped = joined.map((Tuple2<Trade, ItemsByTag> tuple) -> {
        Trade trade = tuple.f0();
        ItemsByTag ibt = tuple.f1();
        Product product = ibt.get(productTag);
        Broker broker = ibt.get(brokerTag);
        Market market = ibt.get(marketTag);
        return trade + ": " + product + ", " + broker + ", " + market;
    });
// end::s12[]
}
Also used : Broker(datamodel.Broker) Product(datamodel.Product) ItemsByTag(com.hazelcast.jet.datamodel.ItemsByTag) Market(datamodel.Market) Pipeline(com.hazelcast.jet.pipeline.Pipeline) Trade(datamodel.Trade) Entry(java.util.Map.Entry) Tuple2(com.hazelcast.jet.datamodel.Tuple2)

Aggregations

ItemsByTag (com.hazelcast.jet.datamodel.ItemsByTag)12 Tag (com.hazelcast.jet.datamodel.Tag)10 List (java.util.List)10 FunctionEx (com.hazelcast.function.FunctionEx)8 Tuple2 (com.hazelcast.jet.datamodel.Tuple2)8 Entry (java.util.Map.Entry)8 LongAccumulator (com.hazelcast.jet.accumulator.LongAccumulator)7 AggregateOperation1 (com.hazelcast.jet.aggregate.AggregateOperation1)7 AggregateOperations.coAggregateOperationBuilder (com.hazelcast.jet.aggregate.AggregateOperations.coAggregateOperationBuilder)7 CoAggregateOperationBuilder (com.hazelcast.jet.aggregate.CoAggregateOperationBuilder)7 Tuple2.tuple2 (com.hazelcast.jet.datamodel.Tuple2.tuple2)7 Tuple3 (com.hazelcast.jet.datamodel.Tuple3)7 Collections.singletonList (java.util.Collections.singletonList)7 Assert.assertEquals (org.junit.Assert.assertEquals)7 Test (org.junit.Test)7 Util.entry (com.hazelcast.jet.Util.entry)6 AggregateOperations (com.hazelcast.jet.aggregate.AggregateOperations)6 Tuple3.tuple3 (com.hazelcast.jet.datamodel.Tuple3.tuple3)6 ArrayList (java.util.ArrayList)6 Map (java.util.Map)6