(關鍵概念)RDD操作,惰性求值/
- 從本地文件系統中加載數據創建RDD
讀取文件:val lines = sc.textFile(“file:///home/cmj/student00/test/wordcount.txt”)
分詞:val aftermap = lines.map(x=>x.split(" "))
res1: Array[String] = Array(hello world yep, hello world, hello)
將分詞結果轉換爲鍵值對,例(hello,3)val mkKV=aftermap.map((_,1))
聚合:val afterreduce=mkKV.reduceByKey((x,y)=>(x+y))
保存:afterreduce.saveAsTextFile(“file:///home/cmj/student00/test/wordout1”)
寫在一行裏面:sc.textFile("file:///home/cmj/student00/test/wordcount.txt").flatMap(x=>x.split(" ")).map((_,1)).reduceByKey((x,y)=>(x+y)).saveAsTextFile("file:///home/cmj/student00/test/wordout2")
- 全路徑打開idea
新建project
新建包
新建類
新建Object
實驗主程序
添加java包
編輯Configurations,添加信息:
運行退出碼是0說明運行成功
3. RDD分區
RDD是彈性分佈式數據集,通常RDD很大,會被分成很多個分區,分別保存在不同的節點上
分區的作用(1)增加並行度(2)減少通信開銷
RDD分區的一個原則是使得分區的個數儘量等於集羣中的CPU核心(core)數目
對於不同的Spark部署模式而言(本地模式、Standalone模式、YARN模式、Mesos模式),都可以通過設置spark.default.parallelism這個參數的值,來配置默認的分區數目
創建RDD時手動指定分區個數
在調用textFile()和parallelize()方法的時候手動指定分區個數即可,語法格式如下:
sc.textFile(path, partitionNum)
其中,path參數用於指定要加載的文件的地址,partitionNum參數用於指定分區個數。