Spark与JVM高级特性:Object的值传递

 找不同:

var oldedges_cogroup: RDD[(Int,(Iterable[(Array[Int],Array[Int],Array[Int],Array[Int],Array[Int])],
      Iterable[Array[Array[Int]]])
      )] =
      graph.flatMap(s => {
        if(s(0)!=s(1)) Array((s(0),s), (s(1),s))
        else Array((s(0),s))
      })
        .groupByKey()
        .map(s=>(s._1,({
          val old_f_list=new Array[Int](Property.symbol_num)
          val new_f_list=new Array[Int](Property.symbol_num)
          val old_b_list=new Array[Int](Property.symbol_num)
          val new_b_list=new Array[Int](Property.symbol_num)
          for(i <-0 until Property.symbol_num){
            old_f_list(i)= -1
            new_f_list(i)= -1
            old_b_list(i)= -1
            new_b_list(i)= -1
          }
          Iterable((Array[Int](),old_f_list,new_f_list,old_b_list,new_b_list))
        },Iterable(s._2.toArray))))
        .partitionBy(new HashPartitioner(defaultpar))

    val symbol_num=Property.symbol_num
    println("symbol_num: "+Property.symbol_num)
    println("edges 中 old index 为空的数量: "+ oldedges_cogroup.filter(s=>{
      val tmp=s._2._1.head
      tmp._2.length<symbol_num||tmp._3.length<symbol_num||tmp._4.length<symbol_num||tmp._5.length<symbol_num
    }).count())

 

var oldedges_cogroup: RDD[(Int,(Iterable[(Array[Int],Array[Int],Array[Int],Array[Int],Array[Int])],
      Iterable[Array[Array[Int]]])
      )] =
      graph.flatMap(s => {
        if(s(0)!=s(1)) Array((s(0),s), (s(1),s))
        else Array((s(0),s))
      })
        .groupByKey()
        .map(s=>(s._1,({
          val old_f_list=new Array[Int](symbol_num)
          val new_f_list=new Array[Int](symbol_num)
          val old_b_list=new Array[Int](symbol_num)
          val new_b_list=new Array[Int](symbol_num)
          for(i <-0 until symbol_num){
            old_f_list(i)= -1
            new_f_list(i)= -1
            old_b_list(i)= -1
            new_b_list(i)= -1
          }
          Iterable((Array[Int](),old_f_list,new_f_list,old_b_list,new_b_list))
        },Iterable(s._2.toArray))))
        .partitionBy(new HashPartitioner(defaultpar))

 

对数组进行创建时,symbol_num的值的传入方式不一样

Property.symbol_num是在driver端由0改变为25,但在Worker处,这个变化并没有传递过去

因此 第一段代码中 数组的长度仍然是0,而第二段代码中则为25。

代码分发时,Driver端和Worker端里存在的Property.symbol_num是初始值0,后面Driver端变化了Property.symbol_num,但Worker端是没有变化的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值