Transformation转换算子之双Value类型交互

2022-04-27 14:59:15 浏览数 (2)

intersection()交集

对源RDD和参数RDD求交集后返回一个新的RDD

交集交集

交集:只有3

案例演示

代码语言:javascript复制
  @Test
  def intersection(): Unit ={

    // 创建sc
    val conf =new SparkConf().setMaster("local[4]").setAppName("test")
    val sc=new SparkContext(conf)

    // 集合1
    val list1=List(1,4,5,6,9,10)
    val rdd1: RDD[Int] = sc.parallelize(list1)

    // 集合2
    val list2=List(2,8,6,5,7,3)
    val rdd2: RDD[Int] = sc.parallelize(list2)

    //求算交集部分
    val value: RDD[Int] = rdd1.intersection(rdd2)

    println(value.collect.toList)
  }

结果

代码语言:javascript复制
List(5, 6)

union()并集

对源RDD和参数RDD求并集后返回一个新的RDD

并集并集

并集:1、2、3全包括

代码语言:javascript复制
  @Test
  def union(): Unit ={

    // 创建sc
    val conf =new SparkConf().setMaster("local[4]").setAppName("test")
    val sc=new SparkContext(conf)

    // 集合1
    val list1=List(1,4,5,6,9,10)
    val rdd1: RDD[Int] = sc.parallelize(list1)

    // 集合2
    val list2=List(2,8,6,5,7,3)
    val rdd2: RDD[Int] = sc.parallelize(list2)

    //求算并集
    val value: RDD[Int] = rdd1.union(rdd2)

    println(value.collect.toList)
  }

结果

代码语言:javascript复制
List(1, 4, 5, 6, 9, 10, 2, 8, 6, 5, 7, 3)

subtract()差集

计算差的一种函数,去除两个RDD中相同元素,不同的RDD将保留下来

差集差集

差集:只有1

案例演示:

代码语言:javascript复制
  @Test
  def subtract(): Unit ={

    // 创建sc
    val conf =new SparkConf().setMaster("local[4]").setAppName("test")
    val sc=new SparkContext(conf)

    // 集合1
    val list1=List(1,4,5,6,9,10)
    val rdd1: RDD[Int] = sc.parallelize(list1)

    // 集合2
    val list2=List(2,8,6,5,7,3)
    val rdd2: RDD[Int] = sc.parallelize(list2)

    //求算差集
    val value1: RDD[Int] = rdd1.subtract(rdd2)
    println(value1.collect.toList)

   val value2: RDD[Int] = rdd2.subtract(rdd1)
    println(value2.collect.toList)
  }

求算:rdd1的差集

代码语言:javascript复制
val value1: RDD[Int] = rdd1.subtract(rdd2)
println(value1.collect.toList)

结果

代码语言:javascript复制
List(4, 1, 9, 10)

求算:rdd2的差集

代码语言:javascript复制
val value2: RDD[Int] = rdd1.subtract(rdd2)
println(value2.collect.toList)

结果

代码语言:javascript复制
List(8, 2, 3, 7)

zip()拉链

该操作可以将两个RDD中的元素,以键值对的形式进行合并。其中,键值对中的Key为第1个RDD中的元素,Value为第2个RDD中的元素。 将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。

案例:相亲配对

代码语言:javascript复制
  @Test
  def zip(): Unit ={
    // 创建sc
    val conf =new SparkConf().setMaster("local[4]").setAppName("test")
    val sc=new SparkContext(conf)

    val boys=List("富贵","二狗子","风少")
    val rdd1: RDD[String] = sc.parallelize(boys)
    
    val girls=List("春娇","小花","翠莲")
    val rdd2: RDD[String] = sc.parallelize(girls)


    val value: RDD[(String, String)] = rdd1.zip(rdd2)
    
    println(value.collect.toList)
  }

结果

代码语言:javascript复制
List((富贵,春娇), (二狗子,小花), (风少,翠莲))

0 人点赞