Ein benutzerdefinierter Partitionierer weist einem TaskManager keine Datensätze zu, sondern einer bestimmten parallelen Aufgabeninstanz des nachfolgenden Operators (ein TM kann mehrere parallele Aufgabeninstanzen desselben Operators ausführen).
Sie können auf die ID einer parallelen Task-Instanz zugreifen, indem Sie eine RichFunction
erweitern, z. B. eine RichMapFunction
erweitern statt eine MapFunction
zu implementieren. Rich-Funktionen sind für alle Umwandlungen verfügbar. A RichFunction
gibt Zugriff auf die RuntimeContext
, die Ihnen die ID der parallelen Task-Instanz teilt:
public static class MyMapper extends RichMapFunction<Long, Long> {
@Override
public void open(Configuration config) {
int pId = getRuntimeContext().getIndexOfThisSubtask();
}
@Override
public Long map(Long value) throws Exception {
// ...
}
}