日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 服務(wù)器 > 莎士比亞文集詞頻統(tǒng)計并行化算法

莎士比亞文集詞頻統(tǒng)計并行化算法

來源:程序員人生   發(fā)布時間:2015-01-07 08:08:28 閱讀次數(shù):4090次

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

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

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


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

是要優(yōu)化還是需要花費1點心思。

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

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

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

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

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

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

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

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

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

另外,我們還可以將范圍較小的停詞表放在1個hash表中,hash查找的效力幾近為單位時間(大家1定要多關(guān)注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題和其他的案例詳解。希望大家共同學(xué)習(xí)討論。
(by老楊,轉(zhuǎn)載請注明出處)


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 一区二区三区精品 | 91久久久久久久一区二区 | 91av福利 | 性欧美亚洲xxxx乳在线观看 | 国产精品成人一区二区网站软件 | 午夜精品久久久久久久白皮肤 | 99精品免费久久 | 99国产精品视频免费观看一公开 | 国产日产久久高清欧美一区 | 成人免费视频在线观看 | 伊人久久超碰 | 92久久精品| 日韩av电影免费看 | 欧美日韩激情 | 综合久久一区二区 | 夜夜av| 成人久久av | 天堂视频在线 | 日韩精品影片 | 国产精选一区 | 日韩欧美中文字幕在线观看 | 亚洲精品综合一区二区 | 成人资源在线观看 | 欧美性另类 | 亚洲图片一区二区 | 91久久精品一区二区 | 91久久久一线二线三线品牌 | 国产亚洲欧美一区二区三区 | 日韩在线视频播放 | 免费欧美一级片 | 国产91亚洲精品 | 一区二区三区四区日韩 | 一区不卡 | 国产不卡视频在线观看 | 欧美福利一区二区三区 | 最近中文字幕mv免费高清在线 | 久久不卡免费视频 | 亚洲三级视频 | 这里有精品视频 | 国产黄色在线看 | 国产在线精品一区 |