官术网_书友最值得收藏!

3.2 RDD簡單實例—wordcount

通過3.1節RDD基礎的理論講解,相信讀者對于在Spark上編程模式(RDD)有了一定的了解,接下來我們通過一個實例來看看如何利用RDD編程來統計一篇文章的詞頻度,從而更加直觀地理解RDD。

在該實例中,首先借助SparkContext提供的textFile()函數從HDFS(Hadoop分布式文件系統)讀取要統計詞頻的文件轉化為記錄著每一行內容的RDD[String](fileRDD),此時的RDD是由表示每一行內容的字符串對象組成的集合。.flapMap(line=>line.split(""))將每一行的單詞按空格分隔,從而形成了記錄著文本文件所有單詞的RDD,此時RDD的每一個元素對應著某一個單詞。.map(word=>(word,1))將上一步得到的記錄著每一個單詞的RDD轉化為(word,1)這種記錄著每一個單詞出現一次的鍵值(key-value)對RDD,以方便下一步采用reduceByKey(_+_)來按照鍵(key)將相同的單詞出現次數進行相加,進而求出每個詞的詞頻,最后通過.saveAsTextFile()函數將結果存入HDFS中。

以上的分析過程中,我們也可以看出flapMap(func)和map(func)的區別和聯系,同為遍歷RDD所有元素并使用傳入函數func對每一個元素進行處理的函數,最大的不同在于RDD一個元素經flapMap處理后會變成一個或多個元素,正如上述實例記錄著每一行內容的RDD被轉化為記錄著每一個單詞的RDD,而map處理后仍為一對一的關系。

另外上面的示例中.flapMap、.map、.reduceByKey在寫法上可寫為緊湊的一行,即:

請讀者不要誤解,雖寫法不同,但依然表示三個連續的轉化操作,下一個轉化操作的父RDD便是上一個轉化操作的結果RDD。

補充:SparkContext——Spark編程主入口點

SparkContext是Spark編程的主入口點,SparkContext負責與Spark集群的連接,可以被用于在集群上創建RDDs、累加器(accumulators)和廣播變量(broadcast variables)。在Spark-shell中,SparkContext已經被系統默認創建以供用戶使用,為sc,如圖3-2所示。

圖3-2

可以看到通過簡單的編程就可以分析出這篇文章每個詞的頻度,但你想過嗎,假如這個需要統計詞頻的文件有10TB大小呢,遠遠超過單機存儲、計算的能力,這種情況我們可以使用Spark簡單的構建分布式應用程序,解決復雜的大數據處理問題,而不用去考慮底層(通信、容錯,等等)實現的細節,這就是Spark的強大之處。

主站蜘蛛池模板: 龙口市| 偏关县| 鄄城县| 武功县| 盘山县| 定兴县| 共和县| 大足县| 射洪县| 全椒县| 梅河口市| 桐柏县| 改则县| 会东县| 梓潼县| 麟游县| 迁西县| 宣恩县| 佛山市| 南阳市| 永顺县| 商丘市| 额敏县| 化隆| 肇源县| 扶余县| 新沂市| 兴山县| 常熟市| 喀喇沁旗| 花莲市| 高州市| 井冈山市| 昭通市| 镇坪县| 浪卡子县| 内黄县| 子长县| 霍邱县| 定南县| 和硕县|