Wie man N-te Zeile der Funke RDD?
Angenommen ich habe ein RDD beliebiger Objekte. Ich möchte um die 10 (sagen) Zeile des RDD. Wie soll ich das tun?
Eine Möglichkeit ist die Verwendung von rdd.nehmen Sie(n) und dann Zugriff auf das N-te element ist das Objekt, aber dieser Ansatz ist sehr langsam, wenn n groß ist.
- Ich glaube, die Antworten auf diese Frage sind auch hier relevant.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie viel es ist effizient, denn es kommt auf die aktuelle und zukünftige Optimierungen in der Funke den Motor, aber Sie können versuchen, tun Sie den folgenden:
Die erste Funktion wandelt die RDD in ein paar (Wert, idx) mit idx von 0 ab. Die zweite Funktion nimmt das element bei idx==9 (der 10.). Die Dritte Funktion nimmt den ursprünglichen Wert. Dann das Ergebnis zurückgegeben.
Den ersten Funktion gezogen werden könnte durch die execution engine und beeinflussen das Verhalten der gesamten Verarbeitung. Probieren Sie es aus.
In jedem Fall, wenn n ist sehr große, diese Methode ist effizient, wenn Sie nicht benötigen, um zu sammeln, ein array von der ersten n Elemente in den Treiber-Knoten.
zipWithIndex
erfordert einen vollständigen Durchlauf über die Daten, die zum berechnen der index-offset jeder anderen partition. Es ist vermutlich Ihre beste Wette, wenn..first
ist alle seine Aufnahmen für die erste Reihe... Schwere Frage.Habe ich noch nicht überprüft, dies für die großen Daten. Aber es funktioniert gut für mich.
n
Werte als Ergebnis die ersten
Elemente (die betroffen ist von der Partitionierung...), um den Treiber-code selbst... so dass es sein kann, langsam oder gar unmöglich zu machen...RDD.collect()
undRDD.take(x)
beide Rückgabewert eine Liste, die unterstützt Indizierung. Also jedes mal müssen wir ein element an der position N. Wir kann führen Sie eine der beiden folgenden codes:RDD.collect()[N-1]
oder
RDD.take(N)[N-1]
funktioniert gut, wenn wir möchten element an der position N.