Spark程式設計模型(之莎士比亞文集詞頻統計實現)
Spark程式設計模型之莎士比亞文集詞頻統計
前段時間因為學校的雲端計算比賽我無意間接觸到了Spark雲端計算框架,從此對其一發不可收拾,無論從其執行效率還有他的其他方面的架構都感覺到無比強大,作為一個雲端計算的解決方案他有著比hadoop更好的優越性。因為Spark我又接觸到程式語言屆的新貴Scala面向物件的函數語言程式設計語言,更是被它的巧妙所折服。
那麼問題來了,請問什麼事Spark? Spark是一個基於記憶體計算的開源的叢集計算系統,目的是讓資料分析更加快速。Spark非常小巧玲瓏,由加州伯克利大學AMP實驗室的Matei為主的小團隊所開發。使用的語言是Scala,專案的core部分的程式碼只有63個Scala檔案,非常短小精悍。
那麼接下來討論Spark程式設計模型,Spark 應用程式有兩部分組成:
– Driver
– Executor
首先由Driver向叢集管理器(Cluster Manager)申請資源,Cluster Manager在給出資源之後,Spark 在worker節點啟動Executor,然後用Driver將jar包檔案傳給Executor,並將任務分割成一個個Task分配給Executor執行,Executor執行結束,提交匯總結束任務執行。
Spark進行程式設計主要是對它的RDD( Resilient Distributed Datasets,彈性分散式資料集)進行操作也就是
其中RDD的操作主要變現在三方面:1.由Base到RDD,也就是我們可以將HDFS中的檔案或者本地的檔案轉換成RDD。
2.Transformation操作也就是RDD->RDD(RDD之間互相轉化的過程)
3.Action操作也就是RDD->driver or Base(RDD返還給Driver或者轉化成hfds(或者本地)的檔案過程)
一下是我總結的一些函式
因為這是我第一次寫關於Spark方面的部落格,那麼我們就拿Spark的一個比賽中非常簡單的題目作介紹。
莎士比亞文集詞頻統計並行化演算法
環境描述: 本題目需要執行在 Apache Spark 1.0.1 環境下,使用 Java 或者 Scala 進行程式設計開發。
題目描述: 在給定的莎士比亞文集上(多個檔案) ,根據規定的停詞表,統計 出現頻度最高的 100 個單詞。
資料集: shakespear 文集, 具體下載地址見大賽網站 http://cloud.seu.edu.cn。
停詞表: stopword.txt, 具體下載地址見大賽網站 http://cloud.seu.edu.cn。
程式設計約束: 程式需要三個輸入引數,第一個為資料集路徑(即 shakespear 資料夾的路徑,資料夾中的檔名為固定檔名),第二個為停詞表路徑,第三 個為輸出檔案路徑。 輸出檔案的格式為:
每個單詞獨立一行。
首先說明一下題目的意思,這個題目就是統計一下資料集: shakespear 文集中除去停詞表中出現的單詞中出現頻率最高的100個。
我的過程如下:
1.停詞儲存
因為涉及的停詞不是很多,但是要注意去除停詞表後面的空格,把他們讀入記憶體處理空格後形成一個Scala停詞陣列.
2.flatMap()
首先我會把每一行出現的製表符,逗號,冒號,分號等一些特殊符號替換成空格,然後按照空格將字串進行分割.
3.filter
把出現在停詞陣列中的單詞和空字元除去
4.map
把上面經過過濾的單詞設為key,值設為1
5.reduceByKey
將所有相同的key進行增量累加
6.獲得前一百個key
從上面所得的map結果集中獲得key列表,然後從列表中獲取前100個keyall
7.將結果儲存磁碟檔案
具體的Scala程式碼如下:
package com.zdx.spark import org.apache.spark.{ SparkContext, SparkConf } import org.apache.spark.SparkContext._ /** * Created by zdx on 14-11-8. */ object ShaShiBiYa { def main(args: Array[String]) { if (args.length != 3) { System.err.println("Usage: ShaShiBiYa <file of poems> <file of stopWord> <file of output>") System.exit(1) } val conf = new SparkConf().setAppName("ShaShiBiYa") val sc = new SparkContext(conf) val rddpoems=sc.textFile(args(0)) val rddstop=sc.textFile(args(1)) val stop=rddstop.map(_.replaceAll(" +","")).collect val word2=rddpoems.flatMap(_.replaceAll("\\t|\\(|\\)|\\||\\.|\\,|\\:|\\[|\\]|\\?|\\--|\\;|\\!"," ").split(" +")).filter(stop.contains(_)==false).filter(_.equals("")==false) val result2=word2.map((_,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)) val keyall=result2.keys val key100=keyall.take(100) val rdd8=sc.parallelize(key100) rdd8.saveAsTextFile(args(2)) sc.stop() } }
在具體的Scala程式碼中我們可以看到,程式碼非常的簡潔,可見Scala是多麼的強大,哈哈。繼續學習,天天向上!!!
相關推薦
Spark程式設計模型(之莎士比亞文集詞頻統計實現)
Spark程式設計模型之莎士比亞文集詞頻統計 前段時間因為學校的雲端計算比賽我無意間接觸到了Spark雲端計算框架,從此對其一發不可收拾,無論從其執行效率還有他的其他方面的架構都感覺到無比強大,作為一個雲端計算的解決方案他有著比hadoop更好的優越性。因為Spark我又接觸到程式語言屆的
Spark修煉之道(進階篇)——Spark入門到精通:第六節 Spark程式設計模型(三)
作者:周志湖 網名:搖擺少年夢 微訊號:zhouzhihubeyond 本節主要內容 RDD transformation(續) RDD actions 1. RDD transformation(續) (1)repartitionAnd
Spark入門實戰系列--3.Spark程式設計模型(上)--程式設計模型及SparkShell實戰
rdd4的生成比較複雜,我們分步驟進行解析,軸線map(x=>(x(1),1))是獲取每行的第二個欄位(使用者Session)計數為1,然後reduceByKey(_+_)是安排Key進行累和,即按照使用者Session號進行計數求查詢次數,其次map(x=>(x._2,x._1))是把Key和V
Spark入門實戰系列--3.Spark程式設計模型(下)--IDEA搭建及實戰
1 package class3 2 3 import org.apache.spark.SparkContext._ 4 import org.apache.spark.{SparkConf, SparkContext} 5 6 object Join{ 7 def
Python爬取句子迷-莎士比亞語錄
爬取句子迷——莎士比亞語錄(約2290個句子,229個分頁) 這個練手的過程,在我不使用IP代理的情況下,我使用的IP慘遭封禁數次,好在隔幾個小時就會被解封,但我卻好比黏人的鼻涕蟲一般,句子不給我,我就不走了,哼哼。 工具使用的是 Python3.7 + requests + Beautiful
莎士比亞《羅密歐與朱麗葉》讀書筆記及讀後感作文4500字
真心 螞蟻 tex 裝飾 隱匿 是你 走了 到你 有時 莎士比亞《羅密歐與朱麗葉》讀書筆記及讀後感作文4500字:莎士比亞經典悲劇,修辭手法書寫美麗愛情,雖然兩大家族因為朱麗葉與羅密歐忠貞的愛情和解,卻換不回偉大愛情死去的悲劇事實。朱生豪的翻譯版本是值得一看的。好多天的早上
CSS布局模型 之 浮動模型(浮動的工作原理和清除浮動技巧?)
浮動 浮動模型 工作原理 浮動的工作原理浮動是讓某元素脫離文檔流,在浮動框之前和之後的非定位元素會當它不存在一樣,可能沿著它的另一側垂直流動,但都為其騰出空間,塊級元素也不例外(被浮動元素占據了部分行空間的塊級元素,仍然被看作是占據了一整行,只不過是被浮動元素占據的那部分空間無法利用罷了)。浮動的
布局模型 之 層模型(position的relative、absolute與fixed區別?)
absolute fixed relative css的布局模型分為流動模型(Flow)、浮動模型(Float)、層模型(Layer)。 浮動模型(Float)和層模型(Layer)有什麽顯著區別? 浮動模型(Float):浮動是讓某元素脫離文檔流的限制,在浮動框之前和之後的非定位元素
Spark MLlib模型(一) 支持向量機【Support Vector Machine】
ssi p s ext edi sgd 訓練集 turn cati eight 目錄 支持向量機原理 支持向量機代碼(Spark Python) 支持向量機原理 待續... 返回目錄 支持向量機代碼(Spark Pytho
轉載:Spark中文指南(入門篇)-Spark程式設計模型(一)
原文:https://www.cnblogs.com/miqi1992/p/5621268.html 前言 本章將對Spark做一個簡單的介紹,更多教程請參考: Spark教程 本章知識點概括 Apache Spark簡介 Spark的四種執行模式 Spark基於
從Storm到Flink:大資料處理的開源系統及程式設計模型(文末福利)
本文節選自CCF大資料教材系列叢書之《大資料處理》,本書由華中科技大學金海教授主編,包括大資料處理基礎技術、大資料處理程式設計與典型應用處理、大資料處理系統與優化三個方面。本教材以大資料處理程式設計為核心,從基礎、程式設計到優化等多個方面對大資料處理技術進行系統介紹,使得讀者能
五種程式設計模型(IO模型)
1、同步非同步,阻塞非阻塞區別聯絡 實際上同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發IO操作並等待(也就是我們說的阻塞)或者輪詢的去檢視IO操作(也就是我們說的非阻塞)是否完成。 非同步過程中程序觸發IO操作以後,直接返回
Spark程式設計指南入門之Java篇一-基本知識
1. Spark的Java開發包 Spark提供Java的開發包,當前最新版本是2.0.2版本:spark-core_2.11-2.0.2.jar,可以從下面連結下載: http://central.maven.org/maven2/org/apache/spark/spa
Spark:Spark 程式設計模型及快速入門
Spark程式設計模型SparkContext類和SparkConf類程式碼中初始化我們可通過如下方式呼叫 SparkContext 的簡單建構函式,以預設的引數值來建立相應的物件。val sc = new SparkContext("local[4]", "Test Spa
JavaWeb(六)--應用程式設計模型(JSP model2 ,MVC,三層結構)
一、MVC MVC並非是java特有,幾乎所有B/S結構專案都用它 M----->Model模型 V------>view檢視 C----->controller控制層 二、JSP model2
基於UDP的C/S網路程式設計模型(使用sendto和recvfrom函式)
#include #include #include #include #include #include #define MAX_CLIENT_NUM 10 #define LOG_ERROR(module_id, format...) \ do{ \ printf(format)
《Spark機器學習》筆記——Spark分類模型(線性迴歸、樸素貝葉斯、決策樹、支援向量機)
一、分類模型的種類 1.1、線性模型 1.1.1、邏輯迴歸 1.2.3、線性支援向量機 1.2、樸素貝葉斯模型 1.3、決策樹模型 二、從資料中抽取合適的特徵 MLlib中的分類模型通過LabeledPoint(label: Double, features
Spark程式設計指南入門之Java篇二-基本操作
4. RDD的操作 4.1 基本操作 RDD有2種類型的操作,一種是轉換transformations,它基於一個存在的資料集創建出一個新的資料集;另一種是行動actions,它通過對一個存在的資料集進行運算得出結果。例如,map方法是轉換操作,它將資料集的每一個元素按指定
程式設計師程式設計藝術-----第二十五章-----二分查詢實現(Jon Bentley:90%程式設計師無法正確實現)
第二十五章:二分查詢實現(Jon Bentley:90%程式設計師無法正確實現)作者:July出處:結構之法演算法之道引言 Jon Bentley:90%以上的程式設計師無法正確無誤的寫出二分查詢程式碼。也許很多人都早已聽說過這句話,但我還是想引用《程式設計珠璣》上的如下幾段文字: “二分查詢可以解決
程式設計細節(載入影象後要判斷影象是否載入成功)
https://blog.csdn.net/keith_bb/article/details/53085379 //判斷影象是否載入成功 if(srcImage.data) cout