Spark编程指南入门之Java篇三-常用Transformations操作

7. 常用的转换Transformations操作

7.1 JavaRDD


JavaRDD<R> map(Function<T,R> f) 将数据集的每一个元素按指定的函数f转换为一个新的RDD

JavaRDD<T> filter(Function<T,Boolean> f) 对数据集中的元素进行过滤,将符合指定函数f条件的元素组成为一个新的RDD

JavaRDD<U> flatMap(FlatMapFunction<T,U> f) 类似于map,但不同的是每个元素可以按指定的函数f映射为0个或多个元素,所以函数f返回的是一个序列集合而不是一个单一的元素

JavaRDD<U> mapPartitions(FlatMapFunction<java.util.Iterator<T>,U> f) 类似于map,但不同的是该操作是应用于每一个分区独立执行(每一个分区的元素为一个整体),所以在一个类型为T的RDD运行时,函数f的类型必须是Iterator<T> => Iterator<U>

JavaRDD<R> mapPartitionsWithIndex(Function2<Integer,java.util.Iterator<T>,java.util.Iterator<R>> f,boolean preservesPartitioning) 类似于mapPartitions,但不同的是指定的函数f同时提供了分区的索引信息,所以在一个类型为T的RDD运行时,函数f的类型必须是(Int, Iterator<T>) => Iterator<U>

JavaRDD<T> sample(boolean withReplacement,double fraction,long seed) 根据参数fraction指定的比例,对数据进行采样,可以选择是否用随机数进行替换,seed 用于指定随机数生成器。当withReplacement=true时,fraction必须>=0;当withReplacement=false时,fraction必须>=0且<=1

JavaRDD<T> union(JavaRDD<T> other) 合并2个RDD为一个新的RDD

JavaRDD<T> intersection(JavaRDD<T> other) 返回2个RDD的交集

JavaRDD<T> distinct(int numPartitions) 将RDD中的元素进行去重操作

JavaPairRDD<T,U> cartesian(JavaRDDLike<U,?> other) 将两个RDD内的所有元素进行笛卡尔积操作

JavaRDD<String> pipe(java.util.List<String> command, java.util.Map<String,String> env) 以管道pipe方式将RDD的各个分区使用shell命令处理,例如一个Perl或 bash脚本。RDD的元素会以进程的标准输入(stdin)写入,输出到进程标准输出(stdout)的字符串会以RDD格式返回

JavaRDD<T> coalesce(int numPartitions, boolean shuffle) 减少分区数为指定的数量numPartitions

JavaRDD<T> repartition(int numPartitions) 随机地对RDD的分区数据进行重新分区,此操作总是会对所有分区的数据进行移动重组。如果想减少分区数量请使用coalesce方法,因为它默认不会对所有分区的数据进行移动重组

7.2 JavaPairRDD

JavaPairRDD<K,Iterable<V>> groupByKey(int numPartitions) 对有相同key的元素进行分组操作,返回(K, Iterable<V>)格式的PairRDD。注意:如果分组是为了按key进行聚合操作(例如sum、average),使用reduceByKey或aggregateByKey方法效率会更高

JavaPairRDD<K,V> reduceByKey(Function2<V,V,V> func,int numPartitions) 对有相同key的元素根据指定的函数func进行聚合操作,返回(K, V)格式的PairRDD

JavaPairRDD<K,U> aggregateByKey(U zeroValue,int numPartitions,Function2<U,V,U> seqFunc,Function2<U,U,U> combFunc) 对有相同key的元素根据指定的函数seqFunc和初始值zeroValue分别在对应的分区进行聚合操作,然后再根据指定的函数combFunc对各分区结果进行聚合操作

JavaPairRDD<K,V> sortByKey(boolean ascending,int numPartitions) 根据key排序(先在每一个分区内排序,如果要返回最终排序的结果,需要调用collect或者save方法,然后执行之前会对各分区内的元素再进行排序)

JavaPairRDD<K,scala.Tuple2<V,W>> join(JavaPairRDD<K,W> other,int numPartitions) 内连接具有相同key的元素,返回(K, (V, W))格式的PairRDD,V和W分别是原有2个RDD里面具有相同key的值

JavaPairRDD<K,scala.Tuple2<Iterable<V>,Iterable<W>>> cogroup(JavaPairRDD<K,W> other,int numPartitions) 对2个PairRDD中具有相同key的元素进行分组操作

JavaPairRDD<K,V> repartitionAndSortWithinPartitions(Partitioner partitioner) 根据给定的分区器对RDD进行重新分区,在每个重新分区中,按照key值对数据排序。此方法比先调用repartition再排序效率更高

TO BE CONTINUED...O(∩_∩)O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值