2016-06-23 5 views

Antwort

1

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 { 
     // ... 
    } 
}