2015-12-03 10 views
8

Il metodo sortPartition di un set di dati ordina il set di dati localmente in base ad alcuni campi specificati. Come posso ottenere il mio grande Dataset ordinato globalmente in modo efficiente in Flink?Ordinamento globale in Apache Flink

risposta

12

Questo al momento non è facilmente possibile perché Flink non fornisce ancora una strategia di partizionamento dell'intervallo integrato.

Un work-around è quello di attuare una consuetudine Partitioner:

DataSet<Tuple2<Long, Long>> data = ... 
data 
    .partitionCustom(new Partitioner<Long>() { 
    int partition(Long key, int numPartitions) { 
     // your implementation 
    } 
    }, 0) 
    .sortPartition(0, Order.ASCENDING) 
    .writeAsText("/my/output"); 

Nota: Al fine di ottenere le partizioni equilibrato con un partizionamento personalizzato, è necessario conoscere il campo di valori e la distribuzione della chiave .

Il supporto per un partizionatore di intervallo (con campionamento automatico) in Apache Flink è attualmente work in progress e dovrebbe essere disponibile a breve.

Modifica (7 giugno 2016): Il partizionamento del raggio è stato aggiunto ad Apache Flink con la versione 1.0.0. È possibile globalmente sorta un insieme di dati come segue:

DataSet<Tuple2<Long, Long>> data = ... 
data 
    .partitionByRange(0) 
    .sortPartition(0, Order.ASCENDING) 
    .writeAsText("/my/output"); 

noti che range partitioning campiona i dati di ingresso impostati per calcolare una distribuzione di dati per le partizioni di pari dimensioni.

+0

1- se non abbiamo informazioni sul set di dati, come possiamo partizionarli? 2- supponiamo di trovare un modo per farlo. questo comando genera un set di dati ordinato globale? –

+0

1) Questo è un buon punto. Se si implementa un partizionatore personalizzato, è necessario conoscere l'intervallo di valori e la distribuzione della chiave per ottenere partizioni bilanciate. Il partizionatore dell'intervallo nella richiesta di pull collegata campiona automaticamente i dati per ottenere una distribuzione. 2) Sì, se si imposta la partizione e si ordina ogni partizione sulla stessa chiave, l'output verrà ordinato globalmente. –

Problemi correlati