2017-01-12 2 views
0

Ich wurde beauftragt, die am häufigsten verwendeten Strings in einer riesigen Datei (Gigabyte) zu finden. Ich habe das folgende Funke-Programm geschrieben, um RDD in der Datei zu erstellen.Top N meist in riesigen Liste verwendet

val conf = new Sparkconf()  //initializing sparkConf 
val sc = new SparkContext(conf) //initializing SparkContext 
val input = sc.textfile("..../input path") //load the input path 
val words = input.flatMap(line=>line.split("")) //split by words 
val counts = words.map(word=>(word, reducebyKey{case(x,y) => x+y})  //reducebykey to count the number of repeating words 
val topcount = counts.top(5)     //select top 5 

Doch diese Top-5 abruft mir nicht die am häufigsten verwendete. Gibt nur die Top-Elemente nach Flatmap zurück.

+0

Wenn ich, kann eine einzelne Datei zu analysieren (auch Gigabyte), ist Funke sehr wahrscheinlich völlig übertrieben, und die gute alte bash ist oft ein Einzeiler schnelle Lösung. – C4stor

Antwort

0

Nachdem Sie die Anzahl der einzelnen Wörter ermittelt haben, sortieren Sie sie in absteigender Reihenfolge.

val conf = new Sparkconf() //initializing sparkConf 
val sc = new SparkContext(conf) //initializing SparkContext 
val input = sc.textfile("..../input path") //load the input path 
val words = input.flatMap(line=>line.split("")) //split by words 
val wordCounts = words.map(x => (x, 1)).reduceByKey((x,y) => x + y) //to count the number of repeating words 
//Flip (word, count) tuples to (count, word) and then sort by key (the counts) 
val wordCountsSorted = wordCounts.map(x => (x._2, x._1)).sortByKey(false,1) 
val topcount = wordCountsSorted.top(5) //select top 5 

Nach reduceByKey opeteratin, wir bekommen eine rdd [(Wort, count)] das heißt so etwas wie [("wir", 5)]. Danach werden wir das Schlüsselwertpaar in wordCountsSorted umleiten, um einen Wert wie [(5, "we")] zu erhalten, so dass wir die sortByKey-Operation darauf anwenden können.

sortByKey ([aufsteigend], [numTasks]) Wenn sie auf einem Datensatz von aufgerufen (K, V) -Paare wobei K Arbeitsgeräte bestellt, liefert eine Datenmenge von (K, V) paarweise durch Tasten aufsteigend sortiert oder absteigender Reihenfolge , wie im booleschen aufsteigenden Argument angegeben.

Referenz here

+0

Können Sie bitte bitte die WordCountsSorted und Topcount Syntax erklären. wenn möglich @Rajat – pruthvi

+0

@pruthvi aktualisiert die Antwort, hoffentlich sollte dies Ihre Zweifel beseitigen –