import org.apache.flink.api.common.operators.Order;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple1;

public class GlobalSort {

  	// bei den VM-Argumenten --add-opens=java.base/java.nio=ALL-UNNAMED setzen, wenn das
	// Programm mit einer InaccessibleObjectException abstürzt
	// und bei Flink 1.15 dann zusätzlich noch: --add-opens=java.base/java.util=ALL-UNNAMED
  
	public static void main(String[] args) throws Exception {
		ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
		env.setParallelism(3);

		DataSet<Integer> amounts = env.fromElements(17, 4, 42, 41, 20, 3, 1, -1, 0,
				-134, 29, 40, 50, 70, 80);

		amounts
		.map(i -> Tuple1.of(i))
		.returns(Types.TUPLE(Types.INT)) // benötigt wegen "type erasure" (vgl. Generics)
		.partitionByRange(0)
		.sortPartition(0, Order.ASCENDING)
				.writeAsText("/tmp/flink");

		env.execute();
	}

}
