筆者使用的開發環境是IntelliJ IDEA Community Edition 2021.3.3 scala版本是2.11.8,與Spark2.0嚴格對應。 (1)在maven環境中導入scala框架 導入Scala框架 導入成功後在main/java 路徑中可以創建新的scala類 至此,sc ...
筆者使用的開發環境是IntelliJ IDEA Community Edition 2021.3.3
scala版本是2.11.8,與Spark2.0嚴格對應。
(1)在maven環境中導入scala框架
導入Scala框架
導入成功後在main/java 路徑中可以創建新的scala類
至此,scala 配置完成。
(2)spark 框架調用測試WordCount案例
①首先,檢查一下 spark相關導包是否正常
scala、hadoop版本都要滿足spark版本。
其中hadoop為了能在window系統下運行,需要下載https://github.com/cdarlint/winutils中對應的版本bin目錄中的hadoop.dll
和winutils.exe,
添加到hadoop的bin目錄下。
但是筆者嘗試發現,官網下載的最舊版本的spark 和 hadoop 難以適配上述代碼倉庫中很久沒有更新的文件,故嘗試利用手頭實驗使用的文件適配。
筆者使用版本:
scala-2.11.8
spark-2.0.0-bin-hadoop2.7
hadoop-2.7.7
使用的文件在如下鏈接中分享
鏈接:https://pan.baidu.com/s/1e3BAlF0SaPMn8iXp9v5fYA 提取碼:unsk
②然後,在pom文件中添加依賴,這個是版本嚴格對應的
代碼如下:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
③添加spark框架
這樣,scala中就能正常導入spark包了
④hadoop 相關需要註意的配置
如果是直接使用的我傳的文件,只需要添加系統變數 HADOOP_HOME:hadoop文件夾路徑
Path:hadoop文件夾/bin 路徑 即可
如果使用的hadoop文件是自己的,請滿足提示①的前提下完成上述步驟
⑤wordCount.scala 樣例
代碼如下
package demo
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object wordCount {
def main(args: Array[String]): Unit = {
// 創建 Spark 運行配置對象
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
// 創建 Spark 上下文環境對象(連接對象)
val sc : SparkContext = new SparkContext(sparkConf)
// 讀取文件數據
val fileRDD: RDD[String] = sc.textFile("input/word.txt")
// 將文件中的數據進行分詞
val wordRDD: RDD[String] = fileRDD.flatMap( _.split(" ") )
// 轉換數據結構 word => (word, 1)
val word2OneRDD: RDD[(String, Int)] = wordRDD.map((_,1))
// 將轉換結構後的數據按照相同的單詞進行分組聚合
val word2CountRDD: RDD[(String, Int)] = word2OneRDD.reduceByKey(_+_)
// 將數據聚合結果採集到記憶體中
val word2Count: Array[(String, Int)] = word2CountRDD.collect()
// 列印結果
word2Count.foreach(println)
//關閉 Spark 連接
sc.stop()
}
}
需要在demo目錄下創建 input文件夾,併在其中添加word.txt文件
⑥關於log日誌:
運行程式過程中會產生大量日誌,為了更好地查看執行結果,可以在src/main/resources目錄下創建log4j.properties文件,添加
日誌配置來取消顯示
spark包中提供對應的模板,不過是臨時文件。
將新文檔中 rootCategory一行中第一個值改為ERROR即可
⑦筆者在嘗試運行scala示例過程中曾報出 xxx not found的錯誤,後經排查發現是部分框架文件沒用成功傳至maven倉庫中,後通過手動添加轉移的辦法解決了這一問題。經檢查,maven倉庫地址在C盤符(應為idea預設目錄),故筆者認為該情況的發生可能跟開發環境沒有賦予管理員許可權運行有關。