1. 程式人生 > >學習spark:二、RDD的Transformations操作

學習spark:二、RDD的Transformations操作

一、簡介

  Spark中的核心資料模型是彈性分散式資料集(RDD),而彈性分散式資料集(RDD)是個抽象類,具體的實現是由各個子類實現的。Spark將常用的大資料操作都轉換為對RDD的子類操作。
  Transformation操作的物件有兩種:Value資料型別,Key-Value資料型別。下面將這兩種資料型別的操作列出來:

二、Translation操作

2.1 Value資料型別

map(func)
  將原來RDD中的每個元素通過自定義函式func轉換為一個包含新元素的RDD。

filter(func)
  對原有RDD中的元素進行過濾,每個元素輸入到func函式中,如果func函式返回為true則保留,返回false則丟棄。

flatMap(func)
  功能與map相似,但是輸出的是一個集合。

mapPatitions(func)
  功能與map相似,但是mapPatitions獲取的是每個分割槽的迭代器。

mapPationsWithIndex(func)
  功能與mapPatitions相似,但是func函式要返回一個表示分割槽index的interger型別的值

sanple(withReplacement, fraction, seed)
  對資料集中的資料進行取樣,想成一個新的RDD

union(otherDateset)
  將兩個資料型別相同的RDD合併成一個RDD

intersection(oterDataset)
  返回一個包含兩個資料型別相同的RDD的交集的全新的RDD

distinct([numTasks])
  對RDD中的元素進行去重操作

cartesian(otherDataset)
  對兩個RDD內的所有元素進行笛卡爾積操作。

pip(command, [envVars])
  對RDD的每個分割槽通過指令碼命令,RDD元素可以寫入程序的stdin和行輸出到標準輸出作為字串返回。

coalesce(numPartitions)
  設定RDD資料的分割槽數,可以讓資料集的操作更加高校。

repartition(numPartitions)
  修改RDD資料的分割槽數

repartionAndSortWithinPartitions(pationer)
  重新設定RDD分割槽,根據keys值排序,這個比repartition更加高效。

2.2 Key-value型別

groupByKey([numTasks])
  返回一個(k, iterable)鍵值對
  注意:如果你分組是為了執行一個聚合(比如求和或平均),使用reduceByKey或aggregateByKey將有更好的效能。
  注意:預設情況下,並行輸出的分割槽數取決於父抽樣的分割槽的數量。您可以通過一個可選的numTasks引數設定不同數量的任務。
  
reduceByKey(func, [numTasks])
  對k相同的鍵值對中的值呼叫func函式,合併產生一個值
  
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])
  當對(K、V)的資料集對呼叫函式時,返回一個數據集的(K,U)對每個鍵值聚合使用給定的組合功能和一箇中立的“0”值。允許產生的聚合值型別不同於輸入值型別,同時避免不必要的配置。而在groupByKey中,需要配置第二個引數。
  
sortedByKey([ascending], [numTasks])
  返回一個按照k值進行排序的鍵值對RDD。

cogroup(oterDataset, [numTasks])
  對兩個RDD進行協同劃分,每個RDD中形同Key的元素分別聚合為一個集合,並且返回兩個RDD中對應key中的元素集合的迭代器。

join(otherDataset, [numTasks])
  對倆個需要連線的RDD進行cogroup函式操作,cogroup原理如上,cogroup操作後形成的新的RDD,對每個Key下的元素進行笛卡爾積操作,返回結果在展平。