《深入理解Spark》之join和数据倾斜问题

package com.lyzx.day34import org.apache.spark._class T2 { /** * join方法深入理解 * join类似于sql中的inner join会把键完全匹配的项列以(key,(v1,v2))的形式列出来 * leftOuterJoin 类似于SQL中的left outer join 把左表的全部列出来,右...
摘要由CSDN通过智能技术生成
package com.lyzx.day34

import org.apache.spark._

class T2 {
  /**
    * join方法深入理解
    * join类似于sql中的inner join会把键完全匹配的项列以(key,(v1,v2))的形式列出来
    * leftOuterJoin 类似于SQL中的left outer join 把左表的全部列出来,右表中不匹配的用None表示
    *   (3,(3,Some(3))),(4,(4,Some(4))),(1,(1,None))
    *
    * @param sc
    */
  def f1(sc:SparkContext): Unit ={
    val rdd1 = sc.parallelize(Array(1,2,3,4,5))
    val rdd2 = sc.parallelize(Array(4,5,6,7))

    val pairRdd1 = rdd1.map(x=>(x,x))
    val pairRdd2 = rdd2.map(x=>(x,x))

//    pairRdd1.join(pairRdd2)
//              .foreach(println)

    pairRdd1.leftOuterJoin(pairRdd2)
              .foreach(println)
  }


  /**
    * 对于join之前进行co-partition和不进行co-partition的效率测试
    * 实测join之前进行co-partition操作的效率高于直接join
    * 注意:数据量小的时候情况不一定
    * @param sc
    */
  def f2(sc:SparkContext): Unit ={

    //产生两个RDD
    val rdd1 = sc.parallelize(1 to 18,3)
    val rdd2 = sc.parallelize(13 to 30,3)

    //映射RDD
    val pairRdd1 = rdd1.map(x=>(x,x))
    val pairRdd2 = rdd2.map(x=>(x,x))

    //查看每个分区里的数据,调试时使用
//    pairRdd1.mapPartitionsWithIndex((index,itr)=>{
//      println("index1="+index)
//      while(itr.hasNext){
//        print("-"+itr.next())
//      }
//      println()
//      for(v <- itr) yield v
//    }).collect()
//
//    pairRdd2.mapPartitionsWithIndex((index,itr)=>{
//      println("index2="+index)
//      while(itr.hasNext){
//        print("="+itr.next())
//      }
//      for(v <- itr) yield v
//    }).collect()

    val start1 = System.currentTimeMillis()

    //直接做join并记录时间
    println("start1=
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值