1、實驗要求
對給定的一個英文文本,使用Spark完成文本內容的讀取並轉換成RDD,然后使用RDD的算子統計每個單詞出現的次數,將統計結果按從大到小的順序打印到控制台上。
2、實驗代碼
import findspark
findspark.init()
from pyspark import SparkContext, SparkConf
sparkConf = SparkConf()
sparkConf.setAppName("wordcount")
sparkConf.setMaster("local")
sparkContext = SparkContext(conf=sparkConf)
txtFile = r'C:\Users\LYW\Desktop\英文文檔.txt' # 文件路徑
rdd = sparkContext.textFile(txtFile)
rdd.flatMap(lambda x: x.split()).map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y).sortBy(keyfunc=(lambda x: x[1]),ascending=False).foreach(lambda x: print(x))
3、編程思路
既然我們要統計單詞出現的次數,那么就要先把數據導入,可以用sc.txtFile()方法來加載文件數據,該方法把文件的URI作為參數,要分割單詞,就可以使用rdd中的flatMap方法,它會遍歷textFile中的每行文本內容,當遍歷到其中一行文本內容時,會把文本內容賦值給變量x,並執行lamda表達式。接着執行x.split()).map(lambda x: (x, 1))會得到一個映射map,這個映射中包含了很多個(key,value),針對這個映射,執行reduceByKey(lambda x, y: x + y)操作,這個操作會把映射中的所有(key,value)按照key進行分組,然后使用sortBy函數進行按照詞頻降序排序,最后使用foreach遍歷打印結果,這樣就計算得到了這個單詞的詞頻。