/** * @deprecated This method is just a hack that is necessary because of the ambiguous nature of this operator. */ public static <Type> ReduceOperator<Type> createGroupedReduce( ReduceDescriptor<Type> reduceDescriptor, DataSetType<? extends Iterable<Type>> inputType, DataSetType<Type> outputType) { return new ReduceOperator<>(reduceDescriptor, (DataSetType<Type>) inputType, outputType); }
@Override @SuppressWarnings("unchecked") protected Operator translate(SubplanMatch subplanMatch, int epoch) { final ReduceOperator reduce = (ReduceOperator) subplanMatch.getMatch("reduce").getOperator(); return new GlobalReduceOperator<>( reduce.getReduceDescriptor(), reduce.getInputType() ).at(epoch); } }
@Override @SuppressWarnings("unchecked") protected Operator translate(SubplanMatch subplanMatch, int epoch) { final GroupByOperator groupBy = (GroupByOperator) subplanMatch.getMatch("groupBy").getOperator(); final ReduceOperator reduce = (ReduceOperator) subplanMatch.getMatch("reduce").getOperator(); return new ReduceByOperator<>( groupBy.getKeyDescriptor(), reduce.getReduceDescriptor(), groupBy.getInputType() ).at(epoch); } }
@SuppressWarnings("unchecked") private SubplanPattern createSubplanPattern() { final OperatorPattern groupByPattern = new OperatorPattern( "groupBy", new GroupByOperator<>( null, DataSetType.none(), DataSetType.groupedNone() ), false); final OperatorPattern reducePattern = new OperatorPattern( "reduce", ReduceOperator.createGroupedReduce( null, DataSetType.groupedNone(), DataSetType.none() ), false); groupByPattern.connectTo(0, reducePattern, 0); return SubplanPattern.fromOperatorPatterns(groupByPattern, reducePattern); }
@SuppressWarnings("unchecked") private SubplanPattern createSubplanPattern() { final OperatorPattern reducePattern = new OperatorPattern( "reduce", new ReduceOperator<>( null, DataSetType.none(), DataSetType.none() ), false); return SubplanPattern.createSingleton(reducePattern); }