第一天学习
-------transformation
1、join,leftOuterJoin,rightOuterJoin,fullOuterJoin
作用在K,V格式的RDD上。根据K进行连接,对(K,V)join(K,W)返回(K,(V,W))
join后的分区数与父RDD分区数多的那一个相同。
2、union
合并两个数据集。两个数据集的类型要一致。返回新的RDD的分区数是合并RDD分区数的总和。用在两个RDD的数据合并到一起做reduceByKey的操作。
3、intersection
取两个数据集的交集,会去重
4、subtract
取两个数据集的差集
5、mapPartition
与map类似,遍历的单位是每个partition上的所有数据。
6、distinct(map+reduceByKey+map)
7、cogroup (This operation is also called groupWith
.)
当调用类型(K,V)和(K,W)的数据上时,返回一个数据集(K,(Iterable<V>,Iterable<W>)),因为在同一个rdd里面,key值有可能相同
Key:1 vlaue:[bbb, ccc]----[B, C]
-------action
1、foreachPartition
遍历的数据是每个partition的数据。
第二天学习
-------transformation
1、mapPartitionWithIndex
类似于mapPartitions,除此之外还会携带分区的索引值。
2、repartition
增加或减少分区。常用来增多分区,会产生shuffle。(多个分区分到一个分区不会产生shuffle),底层源码调用的是(coalesce,shuffle=true)
3、coalesce
coalesce常用来减少分区,第二个参数是减少分区的过程中是否产生shuffle。
true为产生shuffle,false不产生shuffle。默认是false。如果coalesce设置的分区数比原来的RDD的分区数还多的话,第二个参数设置为false不会起作用,前面该条数据在哪个分区增多后也在同一个分区,增多的分区内容为空,如果设置成true,效果和repartition一样。即repartition(numPartitions) = coalesce(numPartitions,true)
4、groupByKey
作用在K,V格式的RDD上。根据Key进行分组。作用在(K,V),返回(K,Iterable <V>)。
5、zip
将两个RDD中的元素(KV格式/非KV格式)变成一个KV格式的RDD,两个RDD的个数必须相同。
JavaRDD<String> nameRDD = sc.parallelize(Arrays.asList("zhangsan","lisi","wangwu"));
JavaRDD<Integer> scoreRDD = sc.parallelize(Arrays.asList(100,200,300,400));
JavaPairRDD<String, Integer> zip = nameRDD.zip(scoreRDD);
zip.foreach(new VoidFunction<Tuple2<String,Integer>>() {
private static final long serialVersionUID = 1L;@Override
public void call(Tuple2<String, Integer> tuple) throws Exception {
System.out.println("tuple --- " + tuple);
}
});输出值为:tuple --- (zhangsan,100)
tuple --- (lisi,200)
tuple --- (wangwu,300)
call方法的参数类型会随着nameRDD和scoreRDD类型的改变而改变
6、zipWithIndex
该函数将RDD中的元素和这个元素在RDD中的索引号(从0开始)组合成(K,V)对。
JavaRDD<String> nameRDD = sc.parallelize(Arrays.asList("zhangsan","lisi","wangwu")); JavaPairRDD<String, Long> zipWithIndex = nameRDD.zipWithIndex(); zipWithIndex.foreach(new VoidFunction<Tuple2<String,Long>>() { private static final long serialVersionUID = 1L; @Override public void call(Tuple2<String, Long> t) throws Exception { System.out.println("t ---- "+ t); } });
输出值为:t ---- (zhangsan,0)
t ---- (lisi,1)
t ---- (wangwu,2)
call方法的二元组t的第二个值就是改元素在RDD中的索引号值
-------action
1、countByKey(会产生shuffle)
作用到K,V格式的RDD上,根据Key计数相同Key的数据集元素。
2、countByValue
根据数据集每个元素相同的内容来计数。返回相同内容的元素对应的条数。
3、reduce
根据聚合逻辑聚合数据集中的每个元素。