@Override public Tuple5<Integer, Integer, Integer, Integer, Integer> map(Tuple2<Integer, Integer> value) throws Exception { return new Tuple5<>(value.f0, value.f1, value.f0, value.f1, 0); } }
@Override public Tuple5<Integer, Long, Integer, String, Long> reduce( Tuple5<Integer, Long, Integer, String, Long> in1, Tuple5<Integer, Long, Integer, String, Long> in2) throws Exception { out.setFields(in1.f0, in1.f1 + in2.f1, 0, "P-)", in1.f4); return out; } }
@Test public void testReduceOnTupleWithMultipleKeyFieldSelectors() throws Exception{ /* * Reduce on tuples with multiple key field selectors */ final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<Tuple5<Integer, Long, Integer, String, Long>> ds = CollectionDataSets.get5TupleDataSet(env); DataSet<Tuple5<Integer, Long, Integer, String, Long>> reduceDs = ds. groupBy(4, 0).reduce((in1, in2) -> { Tuple5<Integer, Long, Integer, String, Long> out = new Tuple5<>(); out.setFields(in1.f0, in1.f1 + in2.f1, 0, "P-)", in1.f4); return out; }); List<Tuple5<Integer, Long, Integer, String, Long>> result = reduceDs .collect(); String expected = "1,1,0,Hallo,1\n" + "2,3,2,Hallo Welt wie,1\n" + "2,2,1,Hallo Welt,2\n" + "3,9,0,P-),2\n" + "3,6,5,BCD,3\n" + "4,17,0,P-),1\n" + "4,17,0,P-),2\n" + "5,11,10,GHI,1\n" + "5,29,0,P-),2\n" + "5,25,0,P-),3\n"; compareResultAsTuples(result, expected); }
@Test public void testConvertObjectArrayToTuple() { Object[] row = new Object[]{1, "message", 1234567L, true, new Object()}; Tuple5 tuple5 = SiddhiTupleFactory.newTuple(row); assertEquals(5, tuple5.getArity()); assertArrayEquals(row, new Object[]{ tuple5.f0, tuple5.f1, tuple5.f2, tuple5.f3, tuple5.f4 }); }
@Override public Tuple5<Integer, Integer, Integer, Integer, Integer> map(Tuple5<Integer, Integer, Integer, Integer, Integer> value) throws Exception { return new Tuple5<>(value.f0, value.f1, value.f3, value.f2 + value.f3, ++value.f4); } }
/** * Shallow tuple copy. * @return A new Tuple with the same fields as this. */ @Override @SuppressWarnings("unchecked") public Tuple5<T0, T1, T2, T3, T4> copy() { return new Tuple5<>(this.f0, this.f1, this.f2, this.f3, this.f4); }
/** * Creates a new tuple and assigns the given values to the tuple's fields. * This is more convenient than using the constructor, because the compiler can * infer the generic type arguments implicitly. For example: * {@code Tuple3.of(n, x, s)} * instead of * {@code new Tuple3<Integer, Double, String>(n, x, s)} */ public static <T0, T1, T2, T3, T4> Tuple5<T0, T1, T2, T3, T4> of(T0 value0, T1 value1, T2 value2, T3 value3, T4 value4) { return new Tuple5<>(value0, value1, value2, value3, value4); } }
public Tuple5Builder<T0, T1, T2, T3, T4> add(T0 value0, T1 value1, T2 value2, T3 value3, T4 value4){ tuples.add(new Tuple5<>(value0, value1, value2, value3, value4)); return this; }
@Override public Tuple5<Integer, Long, String, Long, Integer> reduce(Tuple5<Integer, Long, String, Long, Integer> v1, Tuple5<Integer, Long, String, Long, Integer> v2) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
@Override public Tuple5<Integer, Long, String, Long, Integer> reduce(Tuple5<Integer, Long, String, Long, Integer> v1, Tuple5<Integer, Long, String, Long, Integer> v2) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
@Override public Tuple5<Integer, Long, String, Long, Integer> join( Tuple5<Integer, Long, String, Long, Integer> first, Tuple5<Integer, Long, String, Long, Integer> second) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
@Override public Tuple5<Integer, Long, String, Long, Integer> join( Tuple5<Integer, Long, String, Long, Integer> first, Tuple5<Integer, Long, String, Long, Integer> second) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
@Override public Tuple5<Integer, Long, String, Long, Integer> reduce(Tuple5<Integer, Long, String, Long, Integer> v1, Tuple5<Integer, Long, String, Long, Integer> v2) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
@Override public Tuple5<Integer, Long, String, Long, Integer> reduce(Tuple5<Integer, Long, String, Long, Integer> v1, Tuple5<Integer, Long, String, Long, Integer> v2) throws Exception { return new Tuple5<Integer, Long, String, Long, Integer>(); } }
public static DataStream<Tuple5<Integer, Long, Integer, String, Long>> get5TupleDataStream(StreamExecutionEnvironment env) { List<Tuple5<Integer, Long, Integer, String, Long>> data = new ArrayList<>(); data.add(new Tuple5<>(1, 1L, 0, "Hallo", 1L)); data.add(new Tuple5<>(2, 2L, 1, "Hallo Welt", 2L)); data.add(new Tuple5<>(2, 3L, 2, "Hallo Welt wie", 1L)); data.add(new Tuple5<>(3, 4L, 3, "Hallo Welt wie gehts?", 2L)); data.add(new Tuple5<>(3, 5L, 4, "ABC", 2L)); data.add(new Tuple5<>(3, 6L, 5, "BCD", 3L)); data.add(new Tuple5<>(4, 7L, 6, "CDE", 2L)); data.add(new Tuple5<>(4, 8L, 7, "DEF", 1L)); data.add(new Tuple5<>(4, 9L, 8, "EFG", 1L)); data.add(new Tuple5<>(4, 10L, 9, "FGH", 2L)); data.add(new Tuple5<>(5, 11L, 10, "GHI", 1L)); data.add(new Tuple5<>(5, 12L, 11, "HIJ", 3L)); data.add(new Tuple5<>(5, 13L, 12, "IJK", 3L)); data.add(new Tuple5<>(5, 15L, 14, "KLM", 2L)); data.add(new Tuple5<>(5, 14L, 13, "JKL", 2L)); return env.fromCollection(data); } }
@Override public void join(Tuple3<Integer, Integer, String> in1, Tuple3<Integer, Integer, String> in2, Collector<Tuple5<Integer, Integer, Integer, String, String>> out) throws Exception { out.collect(new Tuple5<Integer, Integer, Integer, String, String>(in1.f0, in1.f1, in2.f1, in1.f2, in2.f2)); } }
public static DataSet<Tuple5<Integer, Long, Integer, String, Long>> getSmall5TupleDataSet(ExecutionEnvironment env) { List<Tuple5<Integer, Long, Integer, String, Long>> data = new ArrayList<>(); data.add(new Tuple5<>(1, 1L, 0, "Hallo", 1L)); data.add(new Tuple5<>(2, 2L, 1, "Hallo Welt", 2L)); data.add(new Tuple5<>(2, 3L, 2, "Hallo Welt wie", 1L)); Collections.shuffle(data); TupleTypeInfo<Tuple5<Integer, Long, Integer, String, Long>> type = new TupleTypeInfo<>( BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO ); return env.fromCollection(data, type); }
public static DataSet<Tuple5<Integer, Long, Integer, String, Long>> get5TupleDataSet(ExecutionEnvironment env) { List<Tuple5<Integer, Long, Integer, String, Long>> data = new ArrayList<>(); data.add(new Tuple5<>(1, 1L, 0, "Hallo", 1L)); data.add(new Tuple5<>(2, 2L, 1, "Hallo Welt", 2L)); data.add(new Tuple5<>(2, 3L, 2, "Hallo Welt wie", 1L)); data.add(new Tuple5<>(3, 4L, 3, "Hallo Welt wie gehts?", 2L)); data.add(new Tuple5<>(3, 5L, 4, "ABC", 2L)); data.add(new Tuple5<>(3, 6L, 5, "BCD", 3L)); data.add(new Tuple5<>(4, 7L, 6, "CDE", 2L)); data.add(new Tuple5<>(4, 8L, 7, "DEF", 1L)); data.add(new Tuple5<>(4, 9L, 8, "EFG", 1L)); data.add(new Tuple5<>(4, 10L, 9, "FGH", 2L)); data.add(new Tuple5<>(5, 11L, 10, "GHI", 1L)); data.add(new Tuple5<>(5, 12L, 11, "HIJ", 3L)); data.add(new Tuple5<>(5, 13L, 12, "IJK", 3L)); data.add(new Tuple5<>(5, 14L, 13, "JKL", 2L)); data.add(new Tuple5<>(5, 15L, 14, "KLM", 2L)); Collections.shuffle(data); TupleTypeInfo<Tuple5<Integer, Long, Integer, String, Long>> type = new TupleTypeInfo<>( BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO ); return env.fromCollection(data, type); }
@Override public void reduce( Iterable<Tuple5<Integer, Long, Integer, String, Long>> values, Collector<Tuple5<Integer, Long, Integer, String, Long>> out) { int i = 0; long l = 0L; long l2 = 0L; for (Tuple5<Integer, Long, Integer, String, Long> t : values) { i = t.f0; l += t.f1; l2 = t.f4; } out.collect(new Tuple5<>(i, l, 0, "P-)", l2)); } }
@Override public void reduce( Iterable<Tuple5<Integer, Long, Integer, String, Long>> values, Collector<Tuple5<Integer, Long, Integer, String, Long>> out) { int i = 0; long l = 0L; long l2 = 0L; StringBuilder concat = new StringBuilder(); for (Tuple5<Integer, Long, Integer, String, Long> t : values) { i = t.f0; l += t.f1; concat.append(t.f3).append("-"); l2 = t.f4; } if (concat.length() > 0) { concat.setLength(concat.length() - 1); } out.collect(new Tuple5<>(i, l, 0, concat.toString(), l2)); } }