private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern<>( "distinct", new DistinctOperator<>(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 dynamic estimator. // Assume with a confidence of 0.7 that 70% of the data quanta are pairwise distinct. return Optional.of(new DefaultCardinalityEstimator(0.7d, 1, this.isSupportingBroadcastInputs(), inputCards -> (long) (inputCards[0] * 0.7d))); } }
DistinctOperator<Long> vertexDistincter = new DistinctOperator<>(Long.class); vertexDistincter.at(epoch); vertexDistincter.setName(String.format("%s (distinct vertices)", operatorBaseName)); vertexDistincter.setCardinalityEstimator(0, new DefaultCardinalityEstimator( 0.5d, 1, false, longs -> Math.round(longs[0] * NUM_VERTICES_PER_EDGE / 2) )); vertexCounter.at(epoch); vertexCounter.setName(String.format("%s (count vertices)", operatorBaseName)); vertexDistincter.connectTo(0, vertexCounter, 0); initializeRanks.at(epoch); initializeRanks.setName(String.format("%s (initialize ranks)", operatorBaseName)); vertexDistincter.connectTo(0, initializeRanks, 0); vertexCounter.broadcastTo(0, initializeRanks, "numVertices");
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "distinct", new DistinctOperator<>(DataSetType.none()), false ); return SubplanPattern.createSingleton(operatorPattern); }