Search in sources :

Example 1 with Order

use of org.apache.flink.api.common.operators.Order in project flink by apache.

the class CoGroupOperator method translateToDataFlow.

@Override
@Internal
protected org.apache.flink.api.common.operators.base.CoGroupOperatorBase<?, ?, OUT, ?> translateToDataFlow(Operator<I1> input1, Operator<I2> input2) {
    String name = getName() != null ? getName() : "CoGroup at " + defaultName;
    try {
        keys1.areCompatible(keys2);
    } catch (IncompatibleKeysException e) {
        throw new InvalidProgramException("The types of the key fields do not match.", e);
    }
    final org.apache.flink.api.common.operators.base.CoGroupOperatorBase<?, ?, OUT, ?> po;
    if (keys1 instanceof SelectorFunctionKeys && keys2 instanceof SelectorFunctionKeys) {
        @SuppressWarnings("unchecked") SelectorFunctionKeys<I1, ?> selectorKeys1 = (SelectorFunctionKeys<I1, ?>) keys1;
        @SuppressWarnings("unchecked") SelectorFunctionKeys<I2, ?> selectorKeys2 = (SelectorFunctionKeys<I2, ?>) keys2;
        po = translateSelectorFunctionCoGroup(selectorKeys1, selectorKeys2, function, getResultType(), name, input1, input2);
        po.setParallelism(getParallelism());
        po.setCustomPartitioner(customPartitioner);
    } else if (keys2 instanceof SelectorFunctionKeys) {
        int[] logicalKeyPositions1 = keys1.computeLogicalKeyPositions();
        @SuppressWarnings("unchecked") SelectorFunctionKeys<I2, ?> selectorKeys2 = (SelectorFunctionKeys<I2, ?>) keys2;
        po = translateSelectorFunctionCoGroupRight(logicalKeyPositions1, selectorKeys2, function, getInput1Type(), getResultType(), name, input1, input2);
        po.setParallelism(getParallelism());
        po.setCustomPartitioner(customPartitioner);
    } else if (keys1 instanceof SelectorFunctionKeys) {
        @SuppressWarnings("unchecked") SelectorFunctionKeys<I1, ?> selectorKeys1 = (SelectorFunctionKeys<I1, ?>) keys1;
        int[] logicalKeyPositions2 = keys2.computeLogicalKeyPositions();
        po = translateSelectorFunctionCoGroupLeft(selectorKeys1, logicalKeyPositions2, function, getInput2Type(), getResultType(), name, input1, input2);
    } else if (keys1 instanceof Keys.ExpressionKeys && keys2 instanceof Keys.ExpressionKeys) {
        try {
            keys1.areCompatible(keys2);
        } catch (IncompatibleKeysException e) {
            throw new InvalidProgramException("The types of the key fields do not match.", e);
        }
        int[] logicalKeyPositions1 = keys1.computeLogicalKeyPositions();
        int[] logicalKeyPositions2 = keys2.computeLogicalKeyPositions();
        CoGroupOperatorBase<I1, I2, OUT, CoGroupFunction<I1, I2, OUT>> op = new CoGroupOperatorBase<>(function, new BinaryOperatorInformation<>(getInput1Type(), getInput2Type(), getResultType()), logicalKeyPositions1, logicalKeyPositions2, name);
        op.setFirstInput(input1);
        op.setSecondInput(input2);
        po = op;
    } else {
        throw new UnsupportedOperationException("Unrecognized or incompatible key types.");
    }
    // configure shared characteristics
    po.setParallelism(getParallelism());
    po.setCustomPartitioner(customPartitioner);
    if (groupSortKeyOrderFirst.size() > 0) {
        Ordering o = new Ordering();
        for (Pair<Integer, Order> entry : groupSortKeyOrderFirst) {
            o.appendOrdering(entry.getLeft(), null, entry.getRight());
        }
        po.setGroupOrderForInputOne(o);
    }
    if (groupSortKeyOrderSecond.size() > 0) {
        Ordering o = new Ordering();
        for (Pair<Integer, Order> entry : groupSortKeyOrderSecond) {
            o.appendOrdering(entry.getLeft(), null, entry.getRight());
        }
        po.setGroupOrderForInputTwo(o);
    }
    return po;
}
Also used : SelectorFunctionKeys(org.apache.flink.api.common.operators.Keys.SelectorFunctionKeys) CoGroupOperatorBase(org.apache.flink.api.common.operators.base.CoGroupOperatorBase) InvalidProgramException(org.apache.flink.api.common.InvalidProgramException) Ordering(org.apache.flink.api.common.operators.Ordering) BinaryOperatorInformation(org.apache.flink.api.common.operators.BinaryOperatorInformation) Order(org.apache.flink.api.common.operators.Order) ExpressionKeys(org.apache.flink.api.common.operators.Keys.ExpressionKeys) IncompatibleKeysException(org.apache.flink.api.common.operators.Keys.IncompatibleKeysException) Internal(org.apache.flink.annotation.Internal)

Example 2 with Order

use of org.apache.flink.api.common.operators.Order in project flink by apache.

the class SortPartitionOperator method translateToDataFlow.

// --------------------------------------------------------------------------------------------
//  Translation
// --------------------------------------------------------------------------------------------
protected org.apache.flink.api.common.operators.SingleInputOperator<?, T, ?> translateToDataFlow(Operator<T> input) {
    String name = "Sort at " + sortLocationName;
    if (useKeySelector) {
        return translateToDataFlowWithKeyExtractor(input, (Keys.SelectorFunctionKeys<T, ?>) keys.get(0), orders.get(0), name);
    }
    // flatten sort key positions
    List<Integer> allKeyPositions = new ArrayList<>();
    List<Order> allOrders = new ArrayList<>();
    for (int i = 0, length = keys.size(); i < length; i++) {
        int[] sortKeyPositions = keys.get(i).computeLogicalKeyPositions();
        Order order = orders.get(i);
        for (int sortKeyPosition : sortKeyPositions) {
            allKeyPositions.add(sortKeyPosition);
            allOrders.add(order);
        }
    }
    Ordering partitionOrdering = new Ordering();
    for (int i = 0, length = allKeyPositions.size(); i < length; i++) {
        partitionOrdering.appendOrdering(allKeyPositions.get(i), null, allOrders.get(i));
    }
    // distinguish between partition types
    UnaryOperatorInformation<T, T> operatorInfo = new UnaryOperatorInformation<>(getType(), getType());
    SortPartitionOperatorBase<T> noop = new SortPartitionOperatorBase<>(operatorInfo, partitionOrdering, name);
    noop.setInput(input);
    if (this.getParallelism() < 0) {
        // use parallelism of input if not explicitly specified
        noop.setParallelism(input.getParallelism());
    } else {
        // use explicitly specified parallelism
        noop.setParallelism(this.getParallelism());
    }
    return noop;
}
Also used : Order(org.apache.flink.api.common.operators.Order) SortPartitionOperatorBase(org.apache.flink.api.common.operators.base.SortPartitionOperatorBase) ArrayList(java.util.ArrayList) UnaryOperatorInformation(org.apache.flink.api.common.operators.UnaryOperatorInformation) Keys(org.apache.flink.api.common.operators.Keys) Ordering(org.apache.flink.api.common.operators.Ordering)

Example 3 with Order

use of org.apache.flink.api.common.operators.Order in project flink by apache.

the class GlobalProperties method matchesOrderedPartitioning.

public boolean matchesOrderedPartitioning(Ordering o) {
    if (this.partitioning == PartitioningProperty.RANGE_PARTITIONED) {
        if (this.ordering.getNumberOfFields() > o.getNumberOfFields()) {
            return false;
        }
        for (int i = 0; i < this.ordering.getNumberOfFields(); i++) {
            if (!this.ordering.getFieldNumber(i).equals(o.getFieldNumber(i))) {
                return false;
            }
            // if this one request no order, everything is good
            final Order oo = o.getOrder(i);
            final Order to = this.ordering.getOrder(i);
            if (oo != Order.NONE) {
                if (oo == Order.ANY) {
                    // if any order is requested, any not NONE order is good
                    if (to == Order.NONE) {
                        return false;
                    }
                } else if (oo != to) {
                    // the orders must be equal
                    return false;
                }
            }
        }
        return true;
    } else {
        return false;
    }
}
Also used : Order(org.apache.flink.api.common.operators.Order)

Aggregations

Order (org.apache.flink.api.common.operators.Order)3 Ordering (org.apache.flink.api.common.operators.Ordering)2 ArrayList (java.util.ArrayList)1 Internal (org.apache.flink.annotation.Internal)1 InvalidProgramException (org.apache.flink.api.common.InvalidProgramException)1 BinaryOperatorInformation (org.apache.flink.api.common.operators.BinaryOperatorInformation)1 Keys (org.apache.flink.api.common.operators.Keys)1 ExpressionKeys (org.apache.flink.api.common.operators.Keys.ExpressionKeys)1 IncompatibleKeysException (org.apache.flink.api.common.operators.Keys.IncompatibleKeysException)1 SelectorFunctionKeys (org.apache.flink.api.common.operators.Keys.SelectorFunctionKeys)1 UnaryOperatorInformation (org.apache.flink.api.common.operators.UnaryOperatorInformation)1 CoGroupOperatorBase (org.apache.flink.api.common.operators.base.CoGroupOperatorBase)1 SortPartitionOperatorBase (org.apache.flink.api.common.operators.base.SortPartitionOperatorBase)1