/** * Copies an instance (exclusive of broadcasts). * * @param that that should be copied */ public MaterializedGroupByOperator(MaterializedGroupByOperator<Type, Key> that) { super(that); this.keyDescriptor = that.getKeyDescriptor(); }
@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))); }
@Override protected Operator translate(SubplanMatch subplanMatch, int epoch) { final GroupByOperator groupBy = (GroupByOperator) subplanMatch.getMatch("groupBy").getOperator(); return new MaterializedGroupByOperator<>( groupBy.getKeyDescriptor(), groupBy.getInputType(), groupBy.getOutputType() ).at(epoch); } }
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern<>( "operator", new MaterializedGroupByOperator<>(null, DataSetType.none(), DataSetType.groupedNone()), false); return SubplanPattern.createSingleton(operatorPattern); }
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "operator", new MaterializedGroupByOperator<>(null, DataSetType.none(), DataSetType.groupedNone()), false ); return SubplanPattern.createSingleton(operatorPattern); }