2016-07-05 11 views
2

Ich bin neu bei Scala Spark und ich habe eine Frage.Scala Spark RDD sortieren nach Index der Teilzeichenfolge

Ich habe RDD, die 120 Millionen Strings enthält, ich versuche, alle Zeichenfolge zu finden, die die Teilzeichenfolge enthält. das geht mir gut.

Jetzt möchte ich die Ausgabe durch den Index so sortieren, dass die gefundene Zeichenfolge, die die Unterzeichenfolge näher am Anfang ist, zuerst gefunden wird.

Zum Beispiel:

Die Unterkette: abcdefg

Die Saiten:

s1 = tryu abcdefg yui

s2 = tr abcdefg yui

s3 = abcdefg yuo

So soll meine gewünschte Ausgabe eine Liste \ rdd sein, die sortiert wird {s3, s2, s1}

Was ist der beste Weg, dies zu tun?

Antwort

3

Die Idee besteht darin, die RDD[String] zu RDD[(String,Index)] zu transformieren, wo der Index mit Java's String indexOf berechnet wird.

// Dataset 
val r = sc.makeRDD(Seq("abf", "ffff", "aaaaaabf", "ttggabf")) 

// Sorting on index of substring "bf", only for those strings that contain "bf" 
val sorted = r.map(s => (s, s.indexOf("bf"))).filter(_._2>0).sortBy(_._2)