RDD編程總結

一: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.當輸入文本時,一般首先要將文本中的內容轉換爲數組

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章