多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 服務器 > 莎士比亞文集詞頻統計并行化算法

莎士比亞文集詞頻統計并行化算法

來源:程序員人生   發布時間:2015-01-07 08:08:28 閱讀次數:4081次

      大家好,好久沒沒更新Spark類容了,主要是最近考試比較多。今天先給大家展現1個實戰案例,這個案例是我在今年參加第1屆高校云計算利用

創新大賽時技能賽第4題――莎士比亞文集詞頻統計并行化算加法。PS:感謝師兄輝哥,真大神!

題目是這樣的(這里截圖展現出來):


在這里停詞表的作用是對在該表中的單詞不予以統計,1般而言停詞表中的單詞是出現頻率比較高的單詞(如the)。這個案例比較簡單,但

是要優化還是需要花費1點心思。

有的人的思路多是這樣的:先對莎士比亞文集進行wordcount操作統計出各個單詞的出現頻率,然后對wordcount中的結果過濾掉在停詞表

現的單詞,最后找到出現頻率最高的100個便可。這類方式可行,但效力略低。大家知道wordcount包括shuffle操作,shuffle所帶來的IO是spark

性能的瓶頸。我們在寫程序的時候應當盡量的較少shuffle IO,那末如何減少shuffle IO呢,在這里我們可以盡可能減少要參與shuffle操作的數據。

所以,優化的思路是對莎士比亞文集進行單詞分片后就進行過濾操作,過濾掉在停詞表中得單詞,然落后行wordcount操作。這樣1來我們可以

過濾掉大量出現頻率很高的辭匯從而減少了主要shuffle IO??赡苡械耐瑢W會問那這里的filter操作豈不是比上面的思路中filter操作需要處理的單詞書更

多,確切是這樣。但是對性能沒有任何影響,為何這么說?大家知道spark的1個良好的特點就是它的pipeline(血統),我們的處理在每個shuffle

操作之 前都會算作1個同1個stage,在這個satge中的計算都是在最后的action時才進行的,血統就是具有這1良好特性。那末對每個partiton上的

文本進行單詞切割落后行filter操作是否是具有pipeline的特性?是否是這兩個操作就像血液1樣瞬間流過你的血管中的兩個細胞?是否是幾近是同時發

生?是否是沒有任何性能影響?

另外,我們還可以將范圍較小的停詞表放在1個hash表中,hash查找的效力幾近為單位時間(大家1定要多關注hash的原理,頭幾天百度面試

含了很多hash類容)。

說了這么多,下面貼出源碼:

  1. import org.apache.spark.SparkContext._
  2. import org.apache.spark.SparkConf
  3. import org.apache.spark._

  4. object Shakespear {
  5.   def main(args: Array[String]) {
  6.     if (args.length != 3) {
  7.       println("USage:<Shakespear> <Stopwords> <Out>")
  8.     }
  9.     //initial SparkConf and SparkContext
  10.     val sc = new SparkContext()

  11.     //To get Shakespear'paper
  12.     val papers = sc.textFile(args(0))
  13.     //To get stopwords
  14.     val stopWords = sc.textFile(args(1)).map(_.trim).collect().toSet + ""

  15.     //To parse papers into words and find the words statisfy the requirement
  16.     val words = papers.flatMap(_.split("[^a-zA-Z]")).map(_.toLowerCase).filter(!stopWords(_)).map((_,1)).
  17.                 reduceByKey(_ + _).map(line=>(line._2, line._1)).top(100).map(line=>(line._2, line._1))

  18.     val result = sc.parallelize(words)

  19.     //To write the result into hdfs
  20.     result.saveAsTextFile(args(2))
  21.   }
  22. }
在后面我會提供包括技能賽第3題和其他的案例詳解。希望大家共同學習討論。
(by老楊,轉載請注明出處)


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 琪琪理论影院2018中文版 | 4四虎44虎www在线影院麻豆 | 欧美黑人巨大 | 亚洲视频影院 | 日本欧美一区二区三区在线 | 国产成人免费a在线资源 | 国产成人在线视频 | 精品成人网| www黄色免费| 亚洲欧美日本欧美在线播放污 | 色诱久久av | 日本特级全黄一级毛片 | 成人自拍偷拍 | 久久国产精品1区2区3区网页 | 亚洲啪在线| 欧美一区二区三区影院 | 亚洲久久综合 | 久久一区二区三区不卡 | 亚洲 日本 欧美 日韩精品 | 亚洲自拍图片区 | 国产精品嫩草影院免费看 | 亚洲欧美日韩网站 | 精品国产一区二区三区在线 | 国产亚洲精品九九久在线观看 | 成人亚洲国产综合精品91 | 国产日韩精品视频一区二区三区 | 日韩精品在线播放 | 最近中文字幕更新免费 | 午夜影院官网 | 国产精品一区二区三区免费 | 影视先锋av资源噜噜 | 女人18一级毛片免费观看 | 视频日韩p影院永久免费 | 日本大胆欧美艺术337p | 国产精品亚洲综合网站 | 欧美一区二区三区精品国产 | 能在线观看的一区二区三区 | 欧美一区二区三区免费不卡 | 精品久久久久久久一区二区伦理 | 图片区小说区号综合区 | 欧美一级精品高清在线观看 |