2016-07-17 7 views
2

Spark/Scalaの学習を始めました。Scalaでテキスト入力をカウントして合計で並べ替える方法

私はそれぞれの総発生によってソートされた語数 1を取得しようとしました:

は、私は、これは一般的な質問であることを理解し、最も可能性の高いどこかに既に回答されていますが、うまくいけば私の次の練習に誰かの助けを得ることができますここ

val file = sc.textFile("hdfs://localhost:9000/Peter") 
val counts = file.flatMap(line => line.split(" ")) 
.map(word =>(word, 1)) 
.reduceByKey(_+_) 
.sortByKey(true, 1) 

結果の一部である:アルファベット順ここ

ワード自体でソートDESC 2のワードは、コードされ enter image description here

私の質問:

  1. これは正しい結果ですか?それをどのように確認するのですか?それは私に正しい結果のようには見えません。たとえば、なぜ最初のものが「1」なのか、私はおそらく、「an」、「of」、「the」のような言葉が上にあるべきだと思います。彼ら?アルファベット順に結果で、私は単語の後、各単語の合計数(DESC)を含める

  2. 私も言葉で別のソート結果を見たい

ことができます誰も私を助けてください?どうもありがとうございました。

+0

はあなたが内容を投稿したり、アップロードすることができようになりますあなたが使用しているテキストファイルですか? – JRomero

+0

ありがとうございます。 Romero、ここにテキストファイルがあります:https://sites.google.com/site/ruwach/bibletext、私が取り組んでいることはNewTestamentと1_2Peterです。そこに8つの小さなテキストファイルがあります。 Peter.txtというファイルを作成し、それをHDFSにロードしてscalaを処理します。 – mdivk

答えて

0

あなたのコードのsortByKeyは、昇順の単語です。だからこそ、1はトップです。最も一般的な単語 valのファイルを取得するために

= sc.textFile( "peter.txt")

val counts = file.flatMap(line => line.split(" ")) 
    .map(word =>(word, 1)) 
    .reduceByKey(_+_) 

// from word -> num to num -> word 
// then sortBy num of occurrence in descending order 
val mostCommon = counts.map(p => (p._2, p._1)).sortByKey(false, 1) 
mostCommon.take(5) 

Array((263,the), (182,of), (119,and), (91,that), (80,in)) 
+0

Mr. Yangさん、ありがとうございましたフルスクリプトを投稿できますか?私はこれを試して、動作していません:val counts = file.flatMap(line => line.split( "")) .map(p =>(p._2、p._1)) .sortByKey(false、 1) – mdivk

+0

ありがとうロッキー – mdivk

関連する問題