大資料基礎教程:建立RDD的二種方式

好程式設計師IT發表於2019-06-12

大資料基礎教程: 建立RDD的二種方式

1.從集合中建立RDD

  val  conf = new   SparkConf (). setAppName ( "Test" ). setMaster ( "local" )
       val  sc = new   SparkContext (conf)
       //這兩個方法都有第二引數是一個預設值2  分片數量(partition的數量)
       //scala集合透過makeRDD建立RDD,底層實現也是parallelize
       val  rdd1 = sc. makeRDD (Array( 1 , 2 , 3 , 4 , 5 , 6 ))
      //scala集合透過parallelize建立RDD
       val  rdd2 = sc. parallelize (Array( 1 , 2 , 3 , 4 , 5 , 6 ))


2.從外部儲存建立RDD

  //從外部儲存建立RDD
  val  rdd3 = sc. textFile ( "hdfs://hadoop01:8020/word.txt" )


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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章