Spark RDD编程API
生活随笔
收集整理的這篇文章主要介紹了
Spark RDD编程API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
1. RDD的算子分類
-
Transformation(轉換):根據數據集創建一個新的數據集,計算后返回一個新RDD;例如:一個rdd進行map操作后生了一個新的rdd。
-
Action(動作):對rdd結果計算后返回一個數值value給驅動程序;?
例如:collect算子將數據集的所有元素收集完成返回給驅動程序。
2. Transformation
RDD中的所有轉換都是延遲加載的,也就是說,它們并不會直接計算結果。相反的,它們只是記住這些應用到基礎數據集上的轉換動作。只有當發生一個要求返回結果給Driver的動作時,這些轉換才會真正運行。這種設計讓Spark更加有效率地運行。
常用的Transformation
| 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, Interator[T]) => Iterator[U] |
| 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任務的個數可以通過第二個可選的參數來設置 |
| 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 |
| coalesce(numPartitions) | 減少 RDD 的分區數到指定值。 |
| repartition(numPartitions) | 重新給 RDD 分區 |
| repartitionAndSortWithinPartitions(partitioner) | 重新給 RDD 分區,并且每個分區內以記錄的 key 排序 |
3. Action
| col 3 is | right-aligned |
| reduce(func) | reduce將RDD中元素前兩個傳給輸入函數,產生一個新的return值,新產生的return值與RDD中下一個元素(第三個元素)組成兩個元素,再被傳給輸入函數,直到最后只有一個值為止。 |
| collect() | 在驅動程序中,以數組的形式返回數據集的所有元素 |
| count() | 返回RDD的元素個數 |
| first() | 返回RDD的第一個元素(類似于take(1)) |
| take(n) | 返回一個由數據集的前n個元素組成的數組 |
| takeOrdered(n, [ordering]) | 返回自然順序或者自定義順序的前 n 個元素 |
| saveAsTextFile(path) | 將數據集的元素以textfile的形式保存到HDFS文件系統或者其他支持的文件系統,對于每個元素,Spark將會調用toString方法,將它裝換為文件中的文本 |
| saveAsSequenceFile(path) | 將數據集中的元素以Hadoop sequencefile的格式保存到指定的目錄下,可以使HDFS或者其他Hadoop支持的文件系統。 |
| saveAsObjectFile(path) | 將數據集的元素,以 Java 序列化的方式保存到指定的目錄下 |
| countByKey() | 針對(K,V)類型的RDD,返回一個(K,Int)的map,表示每一個key對應的元素個數。 |
| foreach(func) | 在數據集的每一個元素上,運行函數func |
| foreachPartition(func) | 在數據集的每一個分區上,運行函數func |
總結
以上是生活随笔為你收集整理的Spark RDD编程API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark DStream相关操作
- 下一篇: hbase命令行演示