2017-01-12 12 views
0

私は巨大なファイル(ギガバイト)の中で最も一般的に使われている文字列を見つける仕事を与えられました。私はファイルにRDDを作成するために、次のスパークプログラムを書いた。大部分は大部分が巨大なリストの中で使用されています

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 

しかし、このトップ5は、私が最も使用されているものをフェッチしていません。フラットマップの後で先頭の要素のみを返します。

+0

、火花は非常におそらく完全にやり過ぎで、古き良きbashのは、多くの場合、1つのライナー高速なソリューションです。 – C4stor

答えて

0

各単語の数を取得した後、降順で並べ替えます。 reduceByKeyのopeteratin後

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 

、我々は[(ワード、カウント)]、すなわち[( "我々"、5)]のようなものRDDを取得します。その後、wordCountsSortedのキー値ペアをフリップして[(5、 "we")]のような値を取得し、sortByKey演算を適用できるようにします。

sortByKey(昇順、降順)キーでソートされた(K、V)ペアのデータセットを返すブール値の昇順引数に指定されています。私は、単一のファイル(でもギガバイト)を解析する可能性がある場合

リファレンスhere

+0

wordCountsSortedとtopcountの構文を教えてください。可能であれば@Rajat – pruthvi

+0

@pruthviが答えを更新しました、うまくいけばあなたの疑問をクリアするはずです –

関連する問題