2016-08-01 22 views
-2

zu bestellen Ich muss den effizientesten Weg zu global RDD große Dimensionen sortieren, Mischen so wenig wie möglich. Ich brauche es für keine Leistungsprobleme, wie zum Beispiel outOfMemory Ausnahmen und so weiter.Beste Möglichkeit, RDD-Elemente Apache Spark

Dank

Antwort

2

Menge an Daten, die Sie jede Lösung sortieren RDD sind so befestigt, dass in einem gewissen Sinne zu mischen haben zu erhalten, die schlurft schon so wenig wie möglich minimal ist. Der einzige, der verbessert werden kann, indem der Sortiermechanismus in shuffle gedrückt wird, aber dieser Teil wird bereits von RDD.sortBy, OrderedRDDFunctions.sortByKey oder JavaPairRDD.sortByKey gehandhabt.

Wählen Sie eine Methode, die auf Ihre Daten anwendbar ist. So zum Beispiel:

val rdd = org.apache.spark.mllib.random.RandomRDDs.normalRDD(sc, 100, 10, 323L) 
rdd.sortBy(identity).take(3) 
// Array[Double] = 
// Array(-2.678684754806642, -1.4394327869537575, -1.2573154896913827) 
2

Der aus der Erinnerung Ausnahmen Sie sehen sind, weil Sie zu wenig Partitionen und (höchstwahrscheinlich) Ihre Daten verzerrt, so dass die Bestellung wirklich großen einige Partitionen macht. In jedem Fall gehen alle Optimierungsbemühungen in Spark zu Datensätzen (und Datenrahmen), um eine bessere Optimierung zu erhalten, transformieren Sie die RDDs in DataFrames und führen Sie die Anordnung unter Verwendung der Konstrukte dort