找不同:
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端是没有变化的