一:RDD相關知識
1.RDD特點:可持久化,可序列化,可分區。
2.對RDD進行分區的優點:增加並行度;減少通信開銷。
3.RDD分區的一個原則是使分區的個數儘量等於集羣中的CPU核心數目。
二:加載RDD(SparkContext簡寫爲sc)
1.從文件系統中加載數據
file=sc.textFile("file://+文件的具體路徑)
aq:從/home/hadoop/Downloads目錄下加載數據dataset2.txt
2.從分佈式文件系統中加載數據
file=sc.textFile("hdfs://localhost:9000+文件的具體路徑)
3.通過並行集合(比如數組)創建RDD(通過調用parallelize方法在已知集合上創建RDD)
aq:將數組(1,2,3,4,5)轉換爲RDD
三:RDD操作
1.轉換操作
(1)filter():過濾函數,過濾出想要的數據。
aq:過濾出Evan信息的條數。
(2)map():分組函數,對每行數據進行操作
aq:過濾出Evan信息並以姓名爲鍵,學科和成績爲值作爲鍵值對並打印。
(3)flatMap():平鋪分組函數,在map函數基礎之上,最終結果全部在一個數組裏。
(4)groupByKey():分組函數,對具有相同的鍵進行分組。
aq:統計總共有多少人。
(5)reduceByKey(func):合併具有相同鍵的值。合併規則按func函數進行合併。
aq:統計每個同學的總成績並打印。
結果:
2.行動操作
(1)count():計數。
(2)collect():以數組的形式返回數據集中的所有元素。
(3)first():返回數據集中的第一個元素。
(4)take(n):返回數據集中的前n個元素。
(5)reduce():聚合函數。
(6)foreach():foreach(line=>println{line})可簡寫爲foreach(println)。
四:常用的鍵值對轉換操作
1.reduceByKey(func):同上。
2.groupByKey(func):同上。
3.keys:獲取所有的鍵。
4.values:獲取所有的值。
5.sortByKey():按鍵進行排序。
6.sortBy():自定義排序方法。
7.mapValues(func):保留key,對value進行操作。
五:綜合實例
(1)該系總共有多少學生
(2)該系共開設多少課程
(3)Tom同學的總成績平均分是多少
(4)求每名同學的選修的課程門數
(5)該系DataBase課程共有多少人選修
(6)各門課程的平均分是多少
方法一:
方法二:
六:總結
1.持久化persist()/cache()
2.當輸入文本時,一般首先要將文本中的內容轉換爲數組