spark中的常用算子 以图中为例
以下以代码展示
distinct 算子 去重
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(3);
JavaRDD<Integer> parallelize = sc.parallelize(list);
JavaRDD<Integer> distinct = parallelize.distinct();//该算中也可以添加参数备注分区数
List<Integer> collect = distinct.collect();
for (Integer integer: collect){
System.out.println(integer);
}
结果:
4
1
3
2
union 合并算子
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(3);
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(5);
list2.add(6);
JavaRDD<Integer> parallelize = sc.parallelize(list1);
JavaRDD<Integer> parallelize1 = sc.parallelize(list2);
List<Integer> collect = parallelize.union(parallelize1).collect();
for (Integer integer: collect){
System.out.println(integer);
}
结果:
1
2
3
4
3
2
5
6
算子intersection 求集合之间的交集
intersection(other) 方法,只返回两个 RDD 中都有的元素。intersection()
在运行时也会去掉所有重复的元素(单个 RDD 内的重复元素也会一起移除)。尽管
intersection() 与 union() 的概念相似,intersection() 的性能却要差很多,因为它需要
通过网络混洗数据来发现共有的元素
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(3);
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(5);
list2.add(6);
JavaRDD<Integer> parallelize = sc.parallelize(list1);
JavaRDD<Integer> parallelize1 = sc.parallelize(list2);
List<Integer> collect = parallelize.intersection(parallelize1).collect();
for (Integer integer: collect){
System.out.println(integer);
}
结果:
2
subtract 算子 求以左边算子为基准 求交集以外的数据
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(3);
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(5);
list2.add(6);
JavaRDD<Integer> parallelize = sc.parallelize(list1);
JavaRDD<Integer> parallelize1 = sc.parallelize(list2);
List<Integer> collect = parallelize1.subtract(parallelize).collect();
for (Integer integer: collect){
System.out.println(integer);
}
结果:
5
6
算子 cartesian 求笛卡尔积 所有的结果都计算上
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(3);
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(2);
list2.add(5);
list2.add(6);
JavaRDD<Integer> parallelize = sc.parallelize(list1);
JavaRDD<Integer> parallelize1 = sc.parallelize(list2);
List<Tuple2<Integer, Integer>> collect = parallelize.cartesian(parallelize1).collect();
for (Tuple2 integer: collect){
System.out.println(integer);
}
结果:
(1,2)
(1,5)
(1,6)
(2,2)
(2,5)
(2,6)
(3,2)
(3,5)
(3,6)
(4,2)
(4,5)
(4,6)
(3,2)
(3,5)
(3,6)