2017-03-11 9 views
-3

私は、CourseraのScalaとSparkでBig Data Analysisの最初の割り当てを行っています。Scala SparkでRDDにリストを渡すには?

def rankLangs(langs: List[String], rdd: RDD[WikipediaArticle]): List[(String, Int)] = ??? 

し、リストが以前のプログラムで定義されています:

val langs = List(
    "JavaScript", "Java", "PHP", "Python", "C#", "C++", "Ruby", "CSS", 
    "Objective-C", "Perl", "Scala", "Haskell", "MATLAB", "Clojure", "Groovy") 

私の理解では、リスト内の各要素のためにということで、私、私は次のメソッドを実装するに捕まってしまったhttps://www.coursera.org/learn/scala-spark-big-data/programming/QcWcs/wikipedia

これをRDDに渡して、フィルタリングを行い、Wikipediaの記事に表示されるプログラミング言語の出現回数を数えることができます。私はRDDでforループ/ foreachを実行してリストをループすることを考えています。それは可能ですか?そうでない場合は、機能を達成するために何をすべきかを提案できますか?次のようにoccurrencesOfLangの enter image description here

私の実装は次のとおりです:

は、ここで問題記述のスナップショットです

def occurrencesOfLang(lang: String, rdd: RDD[WikipediaArticle]): Int = 
    { 
     val tmp: Array[(String, Int)] = rdd.filter(line => line.text.contentEquals(lang)).map(line => (lang, 1)).aggregateByKey(0)(_ + _, _ + _).collect() 
     return tmp(0)._2  
    } 

が助けてくれてありがとう!

+0

私は正確に何を求めているのか分かりません。あなたが何らかの解決策を持っているなら、なぜそれが実行可能かどうか尋ねますか? – Hlib

答えて

0

あなたはこの答えを探しています。

def rankLangs(langs: List[String], rdd: RDD[WikipediaArticle]): List[(String, Int)] = { 
    return langs.map(x=> (x,WikipediaRanking.occurrencesOfLang(x, WikipediaRanking.wikiRdd))).sortBy(_._2); 
} 
0

私はあなたがこのような何かを探していますTNIK:

def occurrencesOfLang(lang: String, rdd: RDD[WikipediaArticle]): Int = { 
     val wordsRdd: Int = wikiRdd.filter(_.text.contains(lang)) 
      .flatMap(word => word.text.split(" ")) 
      .filter(_.equalsIgnoreCase(lang)) 
      .count().toInt 
     wordsRdd 
     } 
+0

これは前のステップです:def occurrencesOfLang(lang:String、rdd:RDD [WikipediaArticle]):Int = { return wikiRdd.filter(line => line.text.toString()。contains(lang + "") ).count()。toInt; } –

関連する問題