Spark算子操作

来源:互联网 发布:可可通改号系统源码 编辑:程序博客网 时间:2024/06/07 20:32
Spark支持两种RDD操作:transformation和action。transformation操作会针对已有的RDD创建一个新的RDD;而action则主要是对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并可以返回结果给Driver程序。例如,map就是一种transformation操作,它用于将已有RDD的每个元素传入一个自定义的函数,并获取一个新的元素,然后将所有的新元素组成一个新的RDD。而reduce就是一种action操作,它用于对RDD中的所有元素进行聚合操作,并获取一个最终的结果,然后返回给Driver程序。

transformation的特点就是lazy特性。lazy特性指的是,如果一个spark应用中只定义了transformation操作,那么即使你执行该应用,这些操作也不会执行。也就是说,transformation是不会触发spark程序的执行的,它们只是记录了对RDD所做的操作,但是不会自发的执行。只有当transformation之后,接着执行了一个action操作,那么所有的transformation才会执行。Spark通过这种lazy特性,来进行底层的spark应用执行的优化,避免产生过多中间结果。

action操作执行,会触发一个spark job的运行,从而触发这个action之前所有的transformation的执行。这是action的特性。

map (transformation操作)
将RDD中的每个元素传入自定义函数,获取一个新的元素,然后用新的元素组成新的RDD

filter(transformation操作)
对RDD中每个元素进行判断,如果返回true则保留,返回false则剔除

flatMap(transformation操作)
与map类似,但是对每个元素都可以返回一个或多个新元素

groupByKey(transformation操作)
根据key进行分组,每个key对应一个Iterable<value>

reduceByKey(transformation操作)
对每个key对应的value,都进行reduce操作,

sortByKey(transformation操作)
对每个key对应的value进行排序操作

join(transformation操作)
对两个包含<key, value>对的RDD进行join操作,每个key join上的pair,都会传入自定义函数进行处理

cogroup(transformation操作)
同join,但是是每个key对应的Iterable<value>都会传入自定义函数进行处理

mapToPair(transformation操作)
将每个元素,映射为一个(v1, v2)这样的Tuple2类型的元素,maptoPair要求与PairFunction配合使用,每一个泛型参数代表了输入类型,第二个和第三个泛型参数,代表的输出的Tuple2的第一个值和第二个值的类型

reduce(action操作)
将RDD中的所有元素进行聚合操作。第一个和第二个元素聚合,值与第三个元素聚合,值与第四个元素聚合,以此类推。

collect(action操作)
从远程集群上,将RDD中所有元素获取到本地客户端

count(action操作)
获取RDD元素总数

take(n)(action操作)
从远程集群上,获取RDD中前n个元素

saveAsTextFile(action操作)
将RDD元素保存到文件中,对每个元素调用toString方法

countByKey(action操作)
对每个key对应的值进行count计数

foreach(action操作)
遍历每个元素
原创粉丝点击