大資料基礎教程:建立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物件
- Java基礎:執行緒的三種建立方式Java執行緒
- 大資料基礎-kakfa的安裝教程大資料
- 資料恢復基礎和進階教程(二)資料恢復
- 大資料學習之路——java基礎(二)大資料Java
- 基於Maven建立SpringBoot的2種方式MavenSpring Boot
- 資料準備指南:10種基礎特徵工程方法的實戰教程特徵工程
- 大資料教程之大資料的影響二大資料
- C++基礎資料二C++
- Redis基礎(二)資料庫Redis資料庫
- 大資料——HBase基礎大資料
- 大資料拯救地球環境的10種方式大資料
- 大資料學習—Spark核心概念RDD大資料Spark
- 大資料:大資料之基礎語法大資料
- Pandas 基礎 (3) - 生成 Dataframe 的幾種方式
- Python教程:Pandas資料轉換編碼的10種方式Python
- python基礎(二)—-資料型別Python資料型別
- 女生適合學Python還是大資料?Python基礎教程!Python大資料
- 2. 大資料基礎大資料
- Oracle資料庫基礎:程式中呼叫sqlplus的方式Oracle資料庫SQL
- Laravel指東:使用模型建立 uuid 主鍵資料的兩種方式Laravel模型UI
- Hadoop基礎(二):從Hadoop框架討論大資料生態Hadoop框架大資料
- Spring Cloud Alibaba基礎教程:支援的幾種服務消費方式(RestTemplate、WebClient、Feign)SpringCloudRESTWebclient
- 2-68. 基礎資料建立 Node & GridNodes
- 前端基礎問題:CSS居中的幾種方式前端CSS
- Struts2教程之二Action建立方式
- 基於資料二十條至少應建立8類資料基礎制度
- 大資料需要掌握的數學基礎大資料
- RDD的詳解、建立及其操作
- 建立Session物件的兩種方式Session物件
- java建立物件的五種方式Java物件
- Java 建立類的四種方式Java
- Map的某種建立方式
- NSTimer的八種建立方式
- 靜默方式安裝、升級oracle(二): 建立資料庫Oracle資料庫
- ① EJB無狀態的bean(建立EJB的基礎教程)Bean