0. PairRDD的意思
PairRDD就是元素為鍵值對的List轉化過來的RDD對象,例如
rdd_1就是一般的非pairRDD,rdd_2為pairRDD對象,而有些SparkAPI操作是針對pairRDD對象的,例如后面將要介紹的mapValues()操作。
1. partitionBy()函數
rdd.partitionBy(int, function),可以對RDD對象分區,第一個參數是分區的個數,第二個對象是自定義分區函數,其作用暫時沒弄清楚!
實驗代碼:
實驗結果:
在創建RDD對象的時候,采用parallelize()分了3個區,之后用partitionBy()函數,分了2個區。
2. cache()函數
對於需要重復用到的且占用內存小的RDD對象,可以通過rdd.cache()存儲起來,之后再次使用的時候,直接讀取內存中的RDD對象,節省時間。
3. mapValues()函數
rdd.mapValues(func)對pairRDD的value進行map操作,不涉及key的操作,只會修改value。
實驗代碼:
實驗結果:
可以看出,通過map()函數可以實現mapValues()函數的功能。
4. sortBy()
用法為:rdd.sortBy(func, ascending, numPartitions)
該函數對RDD對象中的元素進行排序,第一個參數必選,其他參數可選,func指代根據什么標准進行排序,ascending為True的時候為True升序,反之為降序, 第三個參數numPartitions指定重新分區的個數。
實驗代碼:
實驗結果:
5. count(), countByValue()和countByKey()
count()用於計數RDD中元素個數。
countByValue()計數RDD中不同元素的相同value的個數,即根據value相同累加。
countByKey()根據key相同累加,這三個函數中,只有countByKey()只能用於pairRDD對象,其他二者無限制。
實驗代碼:
實驗結果:
注意:countByValue()和countByKey()返回的都是map,不是List。
6. take()和top()
take()取RDD對象中的前幾個元素,不排序
top()取RDD對象中的最大的幾個元素,降序