package com.rdd算子复习

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Test9 {
def main(args: Array[String]): Unit = {
val sparkconf = new SparkConf().setMaster("local[*]").setAppName("wordcount")
val sc =new SparkContext(sparkconf)
val rdd1:RDD[Int]= sc.parallelize(List(1,2,5,7,8,9,3,4,4,5,12),2)
val rdd2:RDD[Int]= sc.parallelize(List(1,2,5,7,8,9,3,4,4,5,11),2)
//并集
val union_value = rdd1.union(rdd2) // rdd1+rdd2
union_value.collect().foreach(println)
//交集 不会重复
val inter_value = rdd1.intersection(rdd2)
inter_value.collect().foreach(println)
//差集 不会重复
val sub_value = rdd2.subtract(rdd1)
println("***"*3)
sub_value.collect().foreach(println)
//笛卡尔积
val diaka_value = rdd2.cartesian(rdd1)
diaka_value.collect().foreach(println)
//拉链 前两个rdd如果长度不同会报错
//分区数相等 每个分区的数值内容相等


val zip_value = rdd1.zip(rdd2)
zip_value.collect().foreach(println)
//zipPartiontios和zipAll的分区数必须相等
val rdd3:RDD[Int]= sc.parallelize(List(1,2,5,7,8,9,3,4,4,5,12),2)
val rdd4:RDD[Int]= sc.parallelize(List(1,2,5,7,8,9,3,4),2)
val zip_value2 = rdd3.zipPartitions(rdd4)((it1,it2)=>{
it1.zip(it2)
})
zip_value2.collect().foreach(println)
val zip_value3 = rdd3.zipPartitions(rdd4)((it1,it2)=>{
//如果缺乏了数据,可以提供默认值
it1.zipAll(it2,100,400)
})
zip_value3.collect().foreach(println)



sc.stop()
}

}