欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何利用Scala語言開發(fā)Spark應(yīng)用程序

這篇文章主要介紹如何利用Scala語言開發(fā)Spark應(yīng)用程序,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

目前創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、蓋州網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

Spark內(nèi)核是由Scala語言開發(fā)的,因此使用Scala語言開發(fā)Spark應(yīng)用程序是自然而然的事情。如果你對Scala語言還不太熟悉,可以閱讀網(wǎng)絡(luò)教程A Scala Tutorial for Java Programmers或者相關(guān)Scala書籍進(jìn)行學(xué)習(xí)。

本文將介紹3個Scala Spark編程實(shí)例,分別是WordCount、TopK和SparkJoin,分別代表了Spark的三種典型應(yīng)用。

1. WordCount編程實(shí)例

WordCount是一個最簡單的分布式應(yīng)用實(shí)例,主要功能是統(tǒng)計輸入目錄中所有單詞出現(xiàn)的總次數(shù),編寫步驟如下:

步驟1:創(chuàng)建一個SparkContext對象,該對象有四個參數(shù):Spark  master位置、應(yīng)用程序名稱,Spark安裝目錄和jar存放位置,對于Spark On  YARN而言,最重要的是前兩個參數(shù),***個參數(shù)指定為“yarn-standalone”,第二個參數(shù)是自定義的字符串,舉例如下:

val sc = new SparkContext(args(0), "WordCount",     System.getenv("SPARK_HOME"), Seq(System.getenv("SPARK_TEST_JAR")))

步驟2:讀取輸入數(shù)據(jù)。我們要從HDFS上讀取文本數(shù)據(jù),可以使用SparkCon

val textFile = sc.textFile(args(1))

當(dāng)然,Spark允許你采用任何Hadoop InputFormat,比如二進(jìn)制輸入格式SequenceFileInputFormat,此時你可以使用SparkContext中的hadoopRDD函數(shù),舉例如下:

val inputFormatClass = classOf[SequenceFileInputFormat[Text,Text]] var hadoopRdd = sc.hadoopRDD(conf, inputFormatClass, classOf[Text], classOf[Text])

或者直接創(chuàng)建一個HadoopRDD對象:

var hadoopRdd = new HadoopRDD(sc, conf,      classOf[SequenceFileInputFormat[Text,Text, classOf[Text], classOf[Text])

步驟3:通過RDD轉(zhuǎn)換算子操作和轉(zhuǎn)換RDD,對于WordCount而言,首先需要從輸入數(shù)據(jù)中每行字符串中解析出單詞,然后將相同單詞放到一個桶中,***統(tǒng)計每個桶中每個單詞出現(xiàn)的頻率,舉例如下:

val result = hadoopRdd.flatMap{         case(key, value)  => value.toString().split("\\s+"); }.map(word => (word, 1)). reduceByKey (_ + _)

其中,flatMap函數(shù)可以將一條記錄轉(zhuǎn)換成多條記錄(一對多關(guān)系),map函數(shù)將一條記錄轉(zhuǎn)換為另一條記錄(一對一關(guān)系),reduceByKey函數(shù)將key相同的數(shù)據(jù)劃分到一個桶中,并以key為單位分組進(jìn)行計算,這些函數(shù)的具體含義可參考:Spark Transformation。

步驟4:將產(chǎn)生的RDD數(shù)據(jù)集保存到HDFS上。可以使用SparkContext中的saveAsTextFile哈數(shù)將數(shù)據(jù)集保存到HDFS目 錄下,默認(rèn)采用Hadoop提供的TextOutputFormat,每條記錄以“(key,value)”的形式打印輸出,你也可以采用 saveAsSequenceFile函數(shù)將數(shù)據(jù)保存為SequenceFile格式等,舉例如下:

result.saveAsSequenceFile(args(2))

當(dāng)然,一般我們寫Spark程序時,需要包含以下兩個頭文件:

import org.apache.spark._ import SparkContext._

WordCount完整程序已在“Apache Spark學(xué)習(xí):利用Eclipse構(gòu)建Spark集成開發(fā)環(huán)境”一文中進(jìn)行了介紹,在次不贅述。

需要注意的是,指定輸入輸出文件時,需要指定hdfs的URI,比如輸入目錄是hdfs://hadoop-test/tmp/input,輸出目 錄是hdfs://hadoop-test/tmp/output,其中,“hdfs://hadoop-test”是由Hadoop配置文件core- site.xml中參數(shù)fs.default.name指定的,具體替換成你的配置即可。

2. TopK編程實(shí)例

TopK程序的任務(wù)是對一堆文本進(jìn)行詞頻統(tǒng)計,并返回出現(xiàn)頻率***的K個詞。如果采用MapReduce實(shí)現(xiàn),則需要編寫兩個作 業(yè):WordCount和TopK,而使用Spark則只需一個作業(yè),其中WordCount部分已由前面實(shí)現(xiàn)了,接下來順著前面的實(shí)現(xiàn),找到Top  K個詞。注意,本文的實(shí)現(xiàn)并不是***的,有很大改進(jìn)空間。

步驟1:首先需要對所有詞按照詞頻排序,如下:

val sorted = result.map {   case(key, value) => (value, key); //exchange key and value }.sortByKey(true, 1)

步驟2:返回前K個:

val topK = sorted.top(args(3).toInt)

步驟3:將K各詞打印出來:

topK.foreach(println)

注意,對于應(yīng)用程序標(biāo)準(zhǔn)輸出的內(nèi)容,YARN將保存到Container的stdout日志中。在YARN中,每個Container存在三個日志 文件,分別是stdout、stderr和syslog,前兩個保存的是標(biāo)準(zhǔn)輸出產(chǎn)生的內(nèi)容,第三個保存的是log4j打印的日志,通常只有第三個日志中 有內(nèi)容。

本程序完整代碼、編譯好的jar包和運(yùn)行腳本可以從這里下載。下載之后,按照“Apache Spark學(xué)習(xí):利用Eclipse構(gòu)建Spark集成開發(fā)環(huán)境”一文操作流程運(yùn)行即可。

3. SparkJoin編程實(shí)例

在推薦領(lǐng)域有一個著名的開放測試集是movielens給的,下載鏈接是:http://grouplens.org/datasets/movielens/,該測試集包含三個文件,分別是ratings.dat、sers.dat、movies.dat,具體介紹可閱讀:README.txt,本節(jié)給出的SparkJoin實(shí)例則通過連接ratings.dat和movies.dat兩個文件得到平均得分超過4.0的電影列表,采用的數(shù)據(jù)集是:ml-1m。程序代碼如下:

import org.apache.spark._ import SparkContext._ object SparkJoin {   def main(args: Array[String]) {     if (args.length != 4 ){       println("usage is org.test.WordCount <master> <rating> <movie> <output>")       return     }     val sc = new SparkContext(args(0), "WordCount",     System.getenv("SPARK_HOME"), Seq(System.getenv("SPARK_TEST_JAR")))       // Read rating from HDFS file     val textFile = sc.textFile(args(1))       //extract (movieid, rating)     val rating = textFile.map(line => {         val fileds = line.split("::")         (fileds(1).toInt, fileds(2).toDouble)        })       val movieScores = rating        .groupByKey()        .map(data => {          val avg = data._2.sum / data._2.size          (data._1, avg)        })        // Read movie from HDFS file      val movies = sc.textFile(args(2))      val movieskey = movies.map(line => {        val fileds = line.split("::")         (fileds(0).toInt, fileds(1))      }).keyBy(tup => tup._1)        // by join, we get <movie, averageRating, movieName>      val result = movieScores        .keyBy(tup => tup._1)        .join(movieskey)        .filter(f => f._2._1._2 > 4.0)        .map(f => (f._1, f._2._1._2, f._2._2._2))       result.saveAsTextFile(args(3))   } }

以上是“如何利用Scala語言開發(fā)Spark應(yīng)用程序”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文標(biāo)題:如何利用Scala語言開發(fā)Spark應(yīng)用程序
轉(zhuǎn)載源于:http://aaarwkj.com/article28/igodjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、建站公司、網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)全網(wǎng)營銷推廣、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
日韩精品欧美成人高清一区二区| 久久国产精品一二三区| 夜夜草视频在线免费观看| 亚洲欧美国产在线日韩| 免费黄色日韩在线观看| 97视频精品全部免费观看| 国产精品成人亚洲一区二区| 国产原创中文剧情性感av| 日韩精品人妻一区二区三区蜜桃臀| 真人国产一级美女免费视频| 日韩美女av在线播放| 国产伦国产一区二区三区在线观看| 日韩av裸体在线播放| 国产原创av剧情在线播放| 森泽佳奈在线视频观看| 国产亚洲综合精品综合区| 国产三级网站在线观看| 亚洲欧洲日韩另类在线| av在线观看亚洲天堂| 欧美高清精品在线视频| 成人免费在线视频不卡| 亚洲av日韩av高潮| 午夜福利亚洲免费久久| 真人国产一级美女免费视频| 久久精品亚洲一区二区| 99久久精品费精品国产风间由美| 国产剧情av在线资源| 日本岛国一区二区在线| 91激情黑丝在线观看| 女同三人按摩高潮喷出| 国产91九色蝌蚪在线观看| 国产精品久久久久大屁股精品性色 | 青青草免费在线视频视频| 人人爽人人妻人人澡| 日韩精品在线观看你懂的| 精品人妻av区天天看片| 粉嫩极品美女国产精品| 亚洲欧美日韩专区一区| 操老熟女一区二区三区| 欧美日韩国产综合精品亚洲| 日日添夜夜躁欧美一区二区|