public DataSetType<Type> getType() { return this.getInputType(); }
/** * Copies an instance (exclusive of broadcasts). * * @param that that should be copied */ public ReduceByOperator(ReduceByOperator<Type, Key> that) { super(that); this.keyDescriptor = that.getKeyDescriptor(); this.reduceDescriptor = that.getReduceDescriptor(); }
ReflectionUtils.specify(Tuple2.class) ); adjacencyCreator.at(epoch); adjacencyCreator.setName(String.format("%s (create adjacencies)", operatorBaseName)); adjacencyCreator.setCardinalityEstimator(0, new DefaultCardinalityEstimator( 0.5d, 1, false, longs -> Math.round(longs[0] * NUM_VERTICES_PER_EDGE) )); .99d, 2, false, longs -> longs[0] )); adjacencyCreator.connectTo(0, rankJoin, 0); loopHead.connectTo(RepeatOperator.ITERATION_OUTPUT_INDEX, rankJoin, 1); ReduceByOperator<Tuple2<Long, Float>, Long> sumPartialRanks = new ReduceByOperator<>( Tuple2::getField0, (t1, t2) -> new Tuple2<>(t1.field0, t1.field1 + t2.field1), ReflectionUtils.specify(Tuple2.class) ); sumPartialRanks.at(epoch); sumPartialRanks.setName(String.format("%s (sum partial ranks)", operatorBaseName)); sumPartialRanks.setCardinalityEstimator(0, new DefaultCardinalityEstimator( 0.5d, 1, false, longs -> Math.round(longs[0] * NUM_VERTICES_PER_EDGE) )); damping.at(epoch); damping.setName(String.format("%s (damping)", operatorBaseName)); sumPartialRanks.connectTo(0, damping, 0); vertexCounter.broadcastTo(0, damping, "numVertices");
@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); } }
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "reduceBy", new ReduceByOperator<>(null, null, DataSetType.none()), false); return SubplanPattern.createSingleton(operatorPattern); }
@Override public Optional<CardinalityEstimator> createCardinalityEstimator( final int outputIndex, final Configuration configuration) { Validate.inclusiveBetween(0, this.getNumOutputs() - 1, outputIndex); // TODO: Come up with a decent way to estimate the "distinctness" of reduction keys. return Optional.of(new DefaultCardinalityEstimator( 0.5d, 1, this.isSupportingBroadcastInputs(), inputCards -> (long) (inputCards[0] * 0.1))); } }
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "reduceBy", new ReduceByOperator<>(null, null, DataSetType.none()), false ); return SubplanPattern.createSingleton(operatorPattern); }