大資料基礎教程:建立RDD的二種方式
大資料基礎教程: 建立RDD的二種方式
1.從集合中建立RDD
val
conf =
new
SparkConf
().
setAppName
(
"Test"
).
setMaster
(
"local"
)
|
2.從外部儲存建立RDD
//從外部儲存建立RDD
|
RDD程式設計API
RDD支援兩種操作:轉化操作和行動操作。RDD 的轉化操作是返回一個新的 RDD的操作,比如 map()和 filter(),而行動操作則是向驅動器程式返回結果或把結果寫入外部系統的操作。比如 count() 和 first()。
Spark採用惰性計算模式,RDD只有第一次在一個行動操作中用到時,才會真正計算。Spark可以最佳化整個計算過程。預設情況下,Spark 的 RDD 會在你每次對它們進行行動操作時重新計算。如果想在多個行動操作中重用同一個 RDD,可以使用 RDD.persist() 讓 Spark 把這個 RDD 快取下來。
Transformation運算元
RDD中的所有轉換都是延遲載入的,也就是說,它們並不會直接計算結果。相反的,它們只是記住這些應用到基礎資料集(例如一個檔案)上的轉換動作。只有當發生一個要求返回結果給Driver的動作時,這些轉換才會真正執行。這種設計讓Spark更加有效率地執行。
轉換 |
含義 |
map (func) |
返回一個新的RDD,該RDD由每一個輸入元素經過func函式轉換後組成 |
filter (func) |
返回一個新的RDD,該RDD由經過func函式計算後返回值為true的輸入元素組成 |
flatMap (func) |
類似於map,但是每一個輸入元素可以被對映為0或多個輸出元素(所以func應該返回一個序列,而不是單一元素) |
mapPartitions (func) |
類似於map,但獨立地在RDD的每一個分片上執行,因此在型別為T的RDD上執行時,func的函式型別必須是Iterator[T] => Iterator[U] |
mapPartitionsWithIndex (func) |
類似於mapPartitions,但func帶有一個整數參數列示分片的索引值,因此在型別為T的RDD上執行時,func的函式型別必須是(Int, Iterator[T]) => Iterator[U] |
sample (withReplacement, fraction, seed) |
根據fraction指定的比例對資料進行取樣,可以選擇是否使用隨機數進行替換,seed用於指定隨機數生成器種子 |
union (otherDataset) |
對源RDD和引數RDD求並集後返回一個新的RDD |
intersection (otherDataset) |
對源RDD和引數RDD求交集後返回一個新的RDD |
distinct ([numTasks])) |
對源RDD進行去重後返回一個新的RDD |
groupByKey ([numTasks]) |
在一個(K,V)的RDD上呼叫,返回一個(K, Iterator[V])的RDD |
reduceByKey (func, [numTasks]) |
在一個(K,V)的RDD上呼叫,返回一個(K,V)的RDD,使用指定的reduce函式,將相同key的值聚合到一起,與groupByKey類似,reduce任務的個數可以透過第二個可選的引數來設定 |
aggregateByKey (zeroValue)(seqOp, combOp, [numTasks]) |
相同的Key值進行聚合操作,在聚合過程中同樣使用了一箇中立的初始值zeroValue:中立值,定義返回value的型別,並參與運算seqOp:用來在同一個partition中合併值combOp:用來在不同partiton中合併值 |
sortByKey ([ascending], [numTasks]) |
在一個(K,V)的RDD上呼叫,K必須實現Ordered介面,返回一個按照key進行排序的(K,V)的RDD |
sortBy (func,[ascending], [numTasks]) |
與sortByKey類似,但是更靈活 |
join (otherDataset, [numTasks]) |
在型別為(K,V)和(K,W)的RDD上呼叫,返回一個相同key對應的所有元素對在一起的(K,(V,W))的RDD |
cogroup (otherDataset, [numTasks]) |
在型別為(K,V)和(K,W)的RDD上呼叫,返回一個(K,(Iterable,Iterable))型別的RDD |
cartesian (otherDataset) |
笛卡爾積 |
pipe (command, [envVars]) |
將一些shell命令用於Spark中生成新的RDD |
coalesce (numPartitions ) |
重新分割槽 |
repartition (numPartitions) |
重新分割槽 |
repartitionAndSortWithinPartitions (partitioner) |
重新分割槽和排序 |
Action運算元
在RDD上執行計算,並返回結果給Driver或寫入檔案系統
動作 |
含義 |
reduce ( func ) |
透過func函式聚集RDD中的所有元素,這個功能必須是可交換且可並聯的 |
collect () |
在驅動程式中,以陣列的形式返回資料集的所有元素 |
count () |
返回RDD的元素個數 |
first () |
返回RDD的第一個元素(類似於take(1)) |
take ( n ) |
返回一個由資料集的前n個元素組成的陣列 |
takeSample ( withReplacement , num , [ seed ]) |
返回一個陣列,該陣列由從資料集中隨機取樣的num個元素組成,可以選擇是否用隨機數替換不足的部分,seed用於指定隨機數生成器種子 |
takeOrdered ( n , [ordering] ) |
takeOrdered和top類似,只不過以和top相反的順序返回元素 |
saveAsTextFile ( path ) |
將資料集的元素以textfile的形式儲存到HDFS檔案系統或者其他支援的檔案系統,對於每個元素,Spark將會呼叫toString方法,將它裝換為檔案中的文字 |
saveAsSequenceFile ( path ) |
將資料集中的元素以Hadoop sequencefile的格式儲存到指定的目錄下,可以使HDFS或者其他Hadoop支援的檔案系統。 |
saveAsObjectFile ( path ) |
|
countByKey () |
針對(K,V)型別的RDD,返回一個(K,Int)的map,表示每一個key對應的元素個數。 |
foreach ( func ) |
在資料集的每一個元素上,執行函式func進行更新。 |
RDD支援兩種操作:轉化操作和行動操作。RDD 的轉化操作是返回一個新的 RDD的操作,比如 map()和 filter(),而行動操作則是向驅動器程式返回結果或把結果寫入外部系統的操作。比如 count() 和 first()。
Spark採用惰性計算模式,RDD只有第一次在一個行動操作中用到時,才會真正計算。Spark可以最佳化整個計算過程。預設情況下,Spark 的 RDD 會在你每次對它們進行行動操作時重新計算。如果想在多個行動操作中重用同一個 RDD,可以使用 RDD.persist() 讓 Spark 把這個 RDD 快取下來。
Transformation運算元* ***
RDD中的所有轉換都是延遲載入的,也就是說,它們並不會直接計算結果。相反的,它們只是記住這些應用到基礎資料集(例如一個檔案)上的轉換動作。只有當發生一個要求返回結果給Driver的動作時,這些轉換才會真正執行。這種設計讓Spark更加有效率地執行。
轉換 | 含義 |
---|---|
map (func) | 返回一個新的RDD,該RDD由每一個輸入元素經過func函式轉換後組成 |
filter (func) | 返回一個新的RDD,該RDD由經過func函式計算後返回值為true的輸入元素組成 |
flatMap (func) | 類似於map,但是每一個輸入元素可以被對映為0或多個輸出元素(所以func應該返回一個序列,而不是單一元素) |
mapPartitions (func) | 類似於map,但獨立地在RDD的每一個分片上執行,因此在型別為T的RDD上執行時,func的函式型別必須是Iterator[T] => Iterator[U] |
mapPartitionsWithIndex (func) | 類似於mapPartitions,但func帶有一個整數參數列示分片的索引值,因此在型別為T的RDD上執行時,func的函式型別必須是(Int, Iterator[T]) => Iterator[U] |
sample (withReplacement, fraction, seed) | 根據fraction指定的比例對資料進行取樣,可以選擇是否使用隨機數進行替換,seed用於指定隨機數生成器種子 |
union (otherDataset) | 對源RDD和引數RDD求並集後返回一個新的RDD |
intersection (otherDataset) | 對源RDD和引數RDD求交集後返回一個新的RDD |
distinct ([numTasks])) | 對源RDD進行去重後返回一個新的RDD |
groupByKey ([numTasks]) | 在一個(K,V)的RDD上呼叫,返回一個(K, Iterator[V])的RDD |
reduceByKey (func, [numTasks]) | 在一個(K,V)的RDD上呼叫,返回一個(K,V)的RDD,使用指定的reduce函式,將相同key的值聚合到一起,與groupByKey類似,reduce任務的個數可以透過第二個可選的引數來設定 |
aggregateByKey (zeroValue)(seqOp, combOp, [numTasks]) | 相同的Key值進行聚合操作,在聚合過程中同樣使用了一箇中立的初始值zeroValue:中立值,定義返回value的型別,並參與運算seqOp:用來在同一個partition中合併值combOp:用來在不同partiton中合併值 |
sortByKey ([ascending], [numTasks]) | 在一個(K,V)的RDD上呼叫,K必須實現Ordered介面,返回一個按照key進行排序的(K,V)的RDD |
sortBy (func,[ascending], [numTasks]) | 與sortByKey類似,但是更靈活 |
join (otherDataset, [numTasks]) | 在型別為(K,V)和(K,W)的RDD上呼叫,返回一個相同key對應的所有元素對在一起的(K,(V,W))的RDD |
cogroup (otherDataset, [numTasks]) | 在型別為(K,V)和(K,W)的RDD上呼叫,返回一個(K,(Iterable,Iterable))型別的RDD |
cartesian (otherDataset) | 笛卡爾積 |
pipe (command, [envVars]) | 將一些shell命令用於Spark中生成新的RDD |
coalesce (numPartitions ) | 重新分割槽 |
repartition (numPartitions) | 重新分割槽 |
repartitionAndSortWithinPartitions (partitioner) | 重新分割槽和排序 |
** Action運算元 **
在RDD上執行計算,並返回結果給Driver或寫入檔案系統
動作 | 含義 |
---|---|
reduce ( func ) | 透過func函式聚集RDD中的所有元素,這個功能必須是可交換且可並聯的 |
collect () | 在驅動程式中,以陣列的形式返回資料集的所有元素 |
count () | 返回RDD的元素個數 |
first () | 返回RDD的第一個元素(類似於take(1)) |
take ( n ) | 返回一個由資料集的前n個元素組成的陣列 |
takeSample ( withReplacement , num , [ seed ]) | 返回一個陣列,該陣列由從資料集中隨機取樣的num個元素組成,可以選擇是否用隨機數替換不足的部分,seed用於指定隨機數生成器種子 |
takeOrdered ( n , [ordering] ) | takeOrdered和top類似,只不過以和top相反的順序返回元素 |
saveAsTextFile ( path ) | 將資料集的元素以textfile的形式儲存到HDFS檔案系統或者其他支援的檔案系統,對於每個元素,Spark將會呼叫toString方法,將它裝換為檔案中的文字 |
saveAsSequenceFile ( path ) | 將資料集中的元素以Hadoop sequencefile的格式儲存到指定的目錄下,可以使HDFS或者其他Hadoop支援的檔案系統。 |
saveAsObjectFile ( path ) |
|
countByKey () | 針對(K,V)型別的RDD,返回一個(K,Int)的map,表示每一個key對應的元素個數。 |
foreach ( func ) | 在資料集的每一個元素上,執行函式func進行更新。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2647409/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【大資料】Spark RDD基礎大資料Spark
- Spark學習(二)——RDD基礎Spark
- JS 基礎篇(一):建立物件的四種方式JS物件
- 大資料基礎-kakfa的安裝教程大資料
- Java基礎:執行緒的三種建立方式Java執行緒
- 大資料學習之路——java基礎(二)大資料Java
- 資料恢復基礎和進階教程(二)資料恢復
- 資料庫基礎教程資料庫
- 【Java基礎】:執行緒的三種建立方式對比分析Java執行緒
- 大資料三種處理方式大資料
- 大資料改變世界的五種方式大資料
- 大資料——HBase基礎大資料
- 大資料學習—Spark核心概念RDD大資料Spark
- 大資料教程之大資料的影響二大資料
- 資料準備指南:10種基礎特徵工程方法的實戰教程特徵工程
- 大資料:大資料之基礎語法大資料
- Redis基礎(二)資料庫Redis資料庫
- C++基礎資料二C++
- 【手工建庫】(二)在原有資料庫的基礎上再建立一個資料庫資料庫
- 大資料拯救地球環境的10種方式大資料
- 《資料探勘基礎教程》書評
- 基於Maven建立SpringBoot的2種方式MavenSpring Boot
- 2. 大資料基礎大資料
- Pandas 基礎 (3) - 生成 Dataframe 的幾種方式
- Python scrapy基礎教程(二)Python
- 大資料需要掌握的數學基礎大資料
- 前端基礎問題:CSS居中的幾種方式前端CSS
- sql大資料 基礎(檢視)SQL大資料
- 基礎資料結構大賞資料結構
- 大資料基本公式——一:基礎大資料公式
- 大資料工程師:大資料的java基礎 第十週大資料工程師Java
- Python 快速教程(基礎篇02):基礎資料型別Python資料型別
- Python教程:Pandas資料轉換編碼的10種方式Python
- 基於資料二十條至少應建立8類資料基礎制度
- Struts2教程之二Action建立方式
- python基礎(二)—-資料型別Python資料型別
- 用好工業大資料的基礎是資料質量大資料
- 大資料學習方法,學大資料需要的基礎和路線大資料