Die Methode sortPartition eines Datasets sortiert das Dataset basierend auf bestimmten Feldern lokal. Wie kann ich meinen großen Datensatz global effizient in Flink sortieren lassen?Globale Sortierung in Apache Flink
Antwort
Dies ist derzeit nicht einfach möglich, da Flink noch keine integrierte Bereichspartitionierungsstrategie bietet.
Ein Work-around ist eine benutzerdefinierte zu implementieren 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");
Hinweis: Um ausgewogene Partitionen mit einem benutzerdefinierten Partitionierer zu erreichen, müssen Sie über den Wertebereich und die Verteilung der Schlüssel wissen .
Unterstützung für einen Bereich Partitionierer (mit automatischer Abtastung) in Apache Flink ist derzeit work in progress und sollte in Kürze verfügbar sein.
Bearbeiten (7. Juni 2016): Bereichspartitionierung wurde zu Apache Flink mit Version 1.0.0 hinzugefügt. Sie können global Art ein Datensatz wie folgt:
DataSet<Tuple2<Long, Long>> data = ...
data
.partitionByRange(0)
.sortPartition(0, Order.ASCENDING)
.writeAsText("/my/output");
Beachten Sie, dass Proben, die die Eingangsdaten eingestellten Bereich Aufteilen einer Datenverteilung für gleich große Partitionen zu berechnen.
- 1. zipWithIndex auf Apache Flink
- 2. Apache Flink Fenster Bestellung
- 3. Sortierung mit Python Flink API
- 4. Apache Flink - groupBy
- 5. Apache Flink vs Twitter Heron?
- 6. Apache Flink DataSet Differenz-/Subtraktionsoperation
- 7. Wie Apache Flink Iterationen implementieren?
- 8. Broadcast-Funktionalität in Apache Flink mit Java
- 9. Grad der Parallelität in Apache Flink
- 10. BZip2 komprimierter Eingang für Apache Flink
- 11. Abfrage von Daten von Apache Flink
- 12. Apache Flink - Summe und gruppiert halten
- 13. Verwendung von Apache Flink und RxJava
- 14. Apache Flink Import scala api Streaming-Erweiterungen
- 15. Apache Flink Union Operator geben falsche Antwort
- 16. Mit einem Kollektionen $ UnmodifiableCollection mit Apache Flink
- 17. Apache Flink + CEP - Erkenne gleiche Ereignisse
- 18. Apache Flink: Wie werden späte Ereignisse gehandhabt?
- 19. Kann nicht Fluss zu HA-Cluster von CLI Apache Flink mit Flink
- 20. Wird Apache Flink Timer nach einem Fehler wiederherstellen?
- 21. Apache Flink - Zuweisen einer eindeutigen ID zum Eingang
- 22. Get JSON Elemente aus einem Web mit Apache Flink
- 23. Apache Flink JDBC InputFormat werfen java.net.SocketException: Socket geschlossen
- 24. Apache Flink DataStream-API hat keine mapPartition-Umwandlung
- 25. Apache Flink CEP-Timout-Muster im Zeitfenster nicht definiert
- 26. Ist es möglich, Riak CS mit Apache Flink zu verwenden?
- 27. /windowApache Flink-Kettenoperatoren
- 28. flink Stream-NoSuchMethodError: org.apache.flink.api.common.ExecutionConfig.setRestartStrategy
- 29. Flink Paket fehlende Klasse CheckpointCommitter - flink-connector-cassandra - schwerer Fehler
- 30. Unzufriedener Linkfehler: Flink
1- Wenn wir keinen Einblick in den Datensatz haben, wie können wir ihn partitionieren? 2 angenommen, wir finden einen Weg, dies zu tun. Gibt dieser Befehl ein global sortiertes Dataset aus? –
1) Das ist ein guter Punkt. Wenn Sie einen benutzerdefinierten Partitionierer implementieren, sollten Sie den Wertebereich und die Verteilung des Schlüssels kennen, um ausgeglichene Partitionen zu erzielen. Der Bereichspartitionierer in der verknüpften Pull-Anforderung tastet die Daten automatisch ab, um eine Verteilung zu erhalten. 2) Ja, wenn Sie die Partition partitionieren und jede Partition nach demselben Schlüssel sortieren, wird die Ausgabe global sortiert. –