IT就到黑馬程序員.gif)
Spark作業(yè)與MapReduce作業(yè)同樣可以先在本地開發(fā)測試,本地執(zhí)行模式與集群提交模式,代碼的業(yè)務(wù)功能相同,因此本書大多數(shù)采用本地開發(fā)模式。下面講解使用IDEA工具開發(fā)WordCount單詞計數(shù)程序的相關(guān)步驟。
1.創(chuàng)建Maven項目,新建資源文件夾
創(chuàng)建一個Maven工程項目,名為“spark_chapter02”。項目創(chuàng)建好后,在main和test目錄下分別創(chuàng)建一個名稱為scala的文件夾,創(chuàng)建好的目錄結(jié)構(gòu)如圖1所示。

圖1 Spark_chapter02項目目錄結(jié)構(gòu)
在圖1中,選中main目錄下的scala文件夾,單擊右鍵選擇【Mark Directory as】→【Sources
Root】,將文件夾標記為資源文件夾類型;同樣的,選中test目錄下的scala文件夾,單擊右鍵選擇【Mark Directory as】→【Test
Sources Root】將文件夾標記為測試資源文件夾類型。其中,資源文件夾中存放項目源碼文件,測試文件夾中存放開發(fā)中測試的源碼文件。
2.添加Spark相關(guān)依賴、打包插件
Maven是一個項目管理工具,雖然我們剛才創(chuàng)建好了項目,但是卻不能識別Spark類,因此,我們需要將Spark相關(guān)的依賴添加到Maven項目中。打開pom.xml文件,在該文件中添加的依賴如下所示:
<!--設(shè)置依賴版本號-->
<properties>
<scala.version>2.11.8</scala.version>
<hadoop.version>2.7.4</hadoop.version>
<spark.version>2.3.2</spark.version>
</properties>
<dependencies>
<!--Scala-->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<!--Spark-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!--Hadoop-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
在上述配置參數(shù)片段中,標簽用來設(shè)置所需依賴的版本號,其中在標簽中添加了Scala、Hadoop和Spark相關(guān)的依賴,設(shè)置完畢后,相關(guān)Jar文件會被自動加載到項目中。
3.編寫代碼,查看結(jié)果
在main目錄下的scala文件夾中,創(chuàng)建WordCount.scala文件用于詞頻統(tǒng)計,代碼如文件1所示。
文件1 WordCount.scala
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
val sparkconf = new
SparkConf().setAppName("WordCount").setMaster("local[2]")
val sparkContext = new SparkContext(sparkconf)
val data : RDD[String] =
sparkContext.textFile("D:\\word\\words.txt")
val words :RDD[String] = data.flatMap(_.split(" "))
val wordAndOne :RDD[(String, Int)] = words.map(x =>(x,1))
val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
val finalResult: Array[(String, Int)] = result.collect()
println(finalResult.toBuffer)
sparkContext.stop()
}
}
上述代碼中,第7-11行代碼創(chuàng)建SparkContext對象并通過SparkConf對象設(shè)置配置參數(shù),其中Master為本地模式,即可以在本地直接運行;第14-24行代碼中,讀取數(shù)據(jù)文件,將獲得的數(shù)據(jù)按照空格切分,將每個單詞記作(單詞,1),之后若出現(xiàn)相同的單詞就將次數(shù)累加,最終打印數(shù)據(jù)結(jié)果;第26行代碼表示關(guān)閉SparkContext對象資源。執(zhí)行代碼成功后,在控制臺可以查看輸出結(jié)果,如圖2所示。

圖2 IDEA開發(fā)WordCount
從圖2可以看出,文本中的單詞已經(jīng)成功統(tǒng)計了出現(xiàn)的次數(shù)。
猜你喜歡:
HBase數(shù)據(jù)庫物理存儲的存儲方式介紹【大數(shù)據(jù)文章】
Scala在使用聲明值和變量時的注意事項有哪些?
HBase中常見的Shell命令有哪幾個?具體是怎樣操作的
黑馬程序員大數(shù)據(jù)培訓(xùn)課程