天天看點

python哈姆雷特詞頻統計_Intellij idea配置Spark開發環境,統計哈姆雷特詞頻(2)

idea 建立maven 項目輸入maven坐标

maven 坐标編輯maven檔案

Spark 體系

中間層Spark,即核心子產品Spark Core,必須在maven中引用。

編譯Spark還要聲明java8編譯工具。

1.8

org.apache.spark

spark-core_2.11

2.1.0

maven-compiler-plugin

${java.version}

${java.version}

idea自動加載引用,在視窗左側Project導航欄-->External Libraries中看到引用org.apache.spark中spark-core_2.11-2.1.0.jar檔案。

idea Externel Libraries

注:Spark Streaming是流式計算架構、SparkSQL資料庫工具、Mlib機器學習架構、GraphX圖計算工具。

Java 8 lambda函數風格的wordCount//定義單詞總數累加器、和停用詞累加器

Accumulator countTotal = jsc.accumulator(0);

Accumulator stopTotal = jsc.accumulator(0);

// 檔案初始化RDD

JavaRDD stopword = jsc.textFile("data/text/stopword.txt");

JavaRDD rdd = jsc.textFile("data/text/Hamlet.txt");

// RDD 轉換為List

List stopWordList = stopword.collect();

// Broadcast 廣播變量,task共享executor的變量

Broadcast> broadcastedStopWordSet = jsc.broadcast(stopWordList);

rdd.filter(l->l.length()>0)

.flatMap(l-> Arrays.asList(l.trim().split(" ")).iterator())

// 将line分割展成詞向量,詞向量在連接配接,傳回Rdd

.map(v->v.replaceAll("['.,:;?!-]", "").toLowerCase())

// 特殊字元處理, Rdd

.filter(v->{

boolean isStop = false;

countTotal.add(1);

if(broadcastedStopWordSet.value().contains(v)){

stopTotal.add(1);

isStop = true;

}

return !isStop;

})

//周遊總數計數、停用詞計數,過濾停止詞, Rdd

.mapToPair(v-> new Tuple2<>(v,1))

.reduceByKey((v1,v2)->v1+v2)

//統計個數

.mapToPair(p-> new Tuple2<>(p._2,p._1))

.sortByKey(false)

//排序

.take(10).forEach(e->{

System.out.println(e._2+":"+e._1);

});将line分割展成詞向量,詞向量連接配接,flatmap傳回Rdd

特殊字元處理,傳回 Rdd

周遊總數計數、停用詞計數,過濾停止詞, 傳回Rdd

Reduce Rdd,傳回Rdd

排序 SortByKey,傳回 Rdd

後期有更多案例介紹Java 8 lambda風格的RDD開發