1. 程式人生 > >Spark程式設計模型(之莎士比亞文集詞頻統計實現)

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,彈性分散式資料集)進行操作也就是

其中Executor對RDD的操作。

    其中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

SparkSpark 程式設計模型及快速入門

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