Ich habe zwei große CSV-Dateien vorsortiert von einer der Spalten. Gibt es eine Möglichkeit, die Tatsache zu nutzen, dass sie bereits sortiert sind, um eine neue sortierte RDD schneller zu bekommen, ohne wieder vollständig sortiert zu werden?Wie zwei vorsortierte rdds in Funken zusammenführen?
Antwort
Die kurze Antwort: Nein, es gibt keine Möglichkeit, die Tatsache zu nutzen, dass zwei Eingabe-RDDs bereits sortiert sind, wenn die Sortierfunktionen von Apache Spark verwendet werden.
Die lange Antwort: Unter bestimmten Bedingungen könnte es einen besseren Weg geben als sortBy
oder sortByKey
.
Der offensichtlichste Fall ist, wenn die Eingangs-RDDs bereits sortiert sind und verschiedene Bereiche darstellen. In diesem Fall ist die einfache Verwendung von rdd1.union(rdd2)
die schnellste (praktisch null Kosten) Möglichkeit zum Kombinieren der Eingabe-RDDs unter der Annahme, dass alle Elemente in rdd1
vor allen Elementen in rdd2
stehen (entsprechend der gewählten Reihenfolge).
Wenn die Bereiche der Eingangs-RDDs überlappen, wird es schwieriger. Unter der Annahme, dass die Ziel-RDD nur eine einzelne Partition haben soll, kann es effizient sein, toLocalIterator
auf beiden RDDs zu verwenden und dann eine Zusammenführung manuell durchzuführen. Wenn das Ergebnis eine RDD sein muss, könnte man dies innerhalb der compute
-Methode eines benutzerdefinierten RDD-Typs tun, die Eingabe-RDDs verarbeitet und die Ausgaben erzeugt.
Wenn die Eingänge groß sind und daher aus vielen Partitionen bestehen, wird es noch schwieriger. In diesem Fall möchten Sie möglicherweise auch mehrere Partitionen in der Ausgabe-RDD. Sie könnten die zuvor erwähnte benutzerdefinierte RDD verwenden, aber mehrere Partitionen erstellen (mit einer RangePartitioner
). Jede Partition würde einen bestimmten Bereich von Elementen abdecken (im optimalen Fall würden diese Bereiche ungefähr gleich große Teile der Ausgabe abdecken).
Das schwierige Teil dabei ist es, die gesamte Eingabe RDDs mehrmals innerhalb compute
zu verarbeiten. Dies kann effizient unter Verwendung von filterByRange
von OrderedRDDFunctions
vermieden werden, wenn die Eingangs-RDDs eine RangePartitioner
verwenden. Wenn sie keine RangePartitioner
verwenden, aber Sie wissen, dass Partitionen intern sortiert sind und auch eine globale Reihenfolge haben, müssten Sie zuerst die effektiven Bereiche herausfinden, die von diesen Partitionen abgedeckt werden, indem Sie tatsächlich in die Daten einsteigen.
Da der Fall mit mehreren Partitionen ziemlich komplex ist, würde ich prüfen, ob die benutzerdefinierte Sortierung wirklich schneller ist als einfach sortBy
oder sortByKey
zu verwenden. Die Logik für und sortByKey
ist hinsichtlich des Shuffling-Prozesses (Übertragung von Daten zwischen Knoten) sehr optimiert. Aus diesem Grund kann es gut sein, dass diese Methoden in vielen Fällen schneller sind als die benutzerdefinierte Logik, obwohl die benutzerdefinierte Logik O (n) sein könnte, während /sortByKey
O sein kann (n log (n)) bestenfalls.
Wenn Sie mehr über die von Apache Spark verwendete Shuffling-Logik erfahren möchten, finden Sie unter article das Grundkonzept.
- 1. Funken Vereinigung mehrerer RDDs
- 2. kombiniert zwei RDDs durch Werte in scala Funken
- 3. die Werte von zwei RDDs in Funken (Python)
- 4. , wie man zwei Funken RDD laufen parallel
- 5. Vergleichen von zwei RDDs
- 6. Wie zwei rds mit scala + funken zu vergleichen.? Es gibt keinen Schlüssel in beiden rdds?
- 7. Speichern von zwei RDDs parallel
- 8. Wie kann man zwei spezielle RDDs verbinden?
- 9. Apache Spark RDD-Filter in zwei RDDs
- 10. Wie mehrere binäre Dateien in Parkett in Funken zusammenführen?
- 11. Wie zwei RDDs in Spark mit Python verbinden?
- 12. Wie werden zwei RDDs seriell in Spark verarbeitet?
- 13. Wie kann ich zwei RDDs in PySpark zippen?
- 14. , wie zwei in Funken RDD verketten
- 15. Funken: subtrahieren zwei Datenrahmen
- 16. Wie zwei eloquente Sammlungen zusammenführen?
- 17. Wie RDDs in Spark Shell?
- 18. Wie zwei Updates in Theano zusammenführen?
- 19. Wie zwei multidimensionale Arrays in PHP zusammenführen?
- 20. Wie effektiv zwei Verzeichnisse in Emacs zusammenführen?
- 21. Zwei Objekte in Python zusammenführen
- 22. Zwei Tabellen in Access zusammenführen?
- 23. Wie RDDs zum Filtern
- 24. Wie Karte Schlüssel/Wert-Paare zwischen zwei separaten RDDs?
- 25. RDD Speicherbedarf in Funken
- 26. Wie RDD in mehrere RDDs duplizieren?
- 27. Zwei Ströme zusammenführen
- 28. zwei Datenbanken zusammenführen
- 29. Zwei Bindungseigenschaften zusammenführen?
- 30. MySQL Zwei Spalten zusammenführen