學習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下的元素進行笛卡爾積操作,返回結果在展平。