map(func) |
对原来的RDD每个元素进行func运算,然后返回一个新的RDD。 |
filter(func) |
过滤器,对原来的RDD每个元素进行func运算,返回运算结果是true的元素。 |
flatmap(func) |
类似于map,每一个输入元素可以被映射为0个或多个元素,并将生成的RDD每个集合中的元素合并为一个集合 |
mapPartitions(func) |
与map类似,区别在于map是对RDD每一个元素运算,mapPartitions是对RDD的每个分区进行计算,由于每次处理的是一个分区,减少了拉取数据次数,所以mapPartitions通常是一个高性能算子。 |
mapParitionsWithIndex(func) |
为func提供了表示分区index的整数值((Int,Iterator)=>Iterator),与mapParitions的区别在于,这个算子返回的RDD带有分区index |
sample(withReplacement,fraction,seed) |
从RDD中抽取样本,第一个参数控制有无放回抽样,即是否将之前抽取的结果放回RDD继续抽取,第二个控制抽取比例,第三个是随机种子,相同的随机种子,抽取的结果必然是相同的,这其中涉及到算法中的伪随机数。 |
union(otherDataSet) |
对源RDD和参数RDD求并集后,返回一个新的RDD |
intersection(otherDataSet) |
对源RDD和参数RDD求交集后,返回一个新的RDD |
distinct([numPartitions]) |
对源RDD去重后返回一个新的RDD |
groupByKey([numPartitions]) |
根据Key值进行聚合,在一个(K,V)的RDD上调用,返回一个(K,iterator(V))的RDD。默认情况下,输出的并行度取决于父RDD的分区数,可以传递一个numPartitions来设置不同的分区个数。 |
reduceByKey(func,[numParititions]]) |
当对一个(K,V)的RDD上使用时,将K值相同的分为同组,将同组内的V值根据func函数进行聚合,最终返回一个(K,V)的RDD |
aggregateByKey(zeroValue)(seqOp,CombOp,[numParitions]) |
先按分区聚合,每个分区的元素和初始值交流后,最终分区之间再总的聚合,例如:RDD([(you,1),(jump,1)],[(i,1),(jump,1)]).aggregateByKey(1)(_+_,_+_),先分区内按Key聚合,结果为RDD([(you,1),(jump,1)],[(i,1),(jump,1)]),接着执行第一个 _+_(初始值此时会加在每个key值中,即RDD([(you,(1,1)),(jump,(1,1))],[(i,(1,1)),(jump,(1,1))])),结果为RDD([(you,2),(jump,2)],[(i,2),(jump,2)]),最终分区之间再聚合,聚合规则为第二个_+_,最终结果为RDD((you,2),(i,2),(jump,4)),详细解析可以参考 注1 的网址。 |
sortByKey([ascending],[numPartitions]) |
在一个K,V的RDD上调用,对Key进行排序,可以依据ascending参数决定是升序还是降序。内部实现使用了RangePartitioner,可以使相应范围内key数据分到同一个partition里,每个partition用到了标准的sort机制,避免了大量数据shuffle |
sortBy(func,[ascending],[numPartitions]) |
与sortByKey相似,但是不同处在与更灵活,前者只能依靠Key进行排序,sortBy根据func来决定排序规则。 |
join(otherDataSet,[numPartitions]) |
两个(K,V)的RDD求交集。当对(K,V)和(K,W)数据集调用时,返回一个(K,(V,W))数据集,相当于内连接,同时还有leftOuterJoin、rightOuterJoin和fullOuterJoin。 |
cogroup(otherDataSet,[numPartitions]) |
在类型(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))的RDD。 |
cartesian(otherDataSet) |
返回一个两个RDD笛卡尔积,即所有元素的关联组合 |
pipe(command,[envVars]) |
调用外部程序,RDD将每个分区执行command(shell命令或者perl、bash脚本),RDD的每个元素作为每个command的输入,command的输出以字符串返回给RDD |
coalesce(numPartitions,[shuffle]) |
重分区,默认是分区由多变少,不涉及shuffle操作,如果要分区由少变多,第二个参数需要设置为true,内部将使用HashPartitioner将数据散列分布在新的分区上。 |
repartition(numPartitions) |
内部实现为coalesce(numPartitions, shuffle = true),不管增大还是减少分区,其必然涉及到shuffle操作,减少分区时建议使用coalesce,避免shuffle操作。 |
repartitionAndSortWithinPartitions(partitioner) |
根据指定的partitioner对RDD进行重新分区,并且在分区的时候排序。适用于(K,V)的RDD,性能比先repartition再排序效率高,因为它可以将排序在shuffle阶段完成。 |
cache/persist |
RDD缓存机制,可以将RDD缓存到指定位置,避免重复计算从而减少时间,cache内部调用了persist方法,cache默认就一个缓存级别(内存),persist提供了多种缓存级别 |