spark中广播sc.broadcast 和 单独的使用Array或者Set 进行filter的区别

版权声明:博主原创文章属私人所有,未经允许 不可转发和使用 https://blog.csdn.net/a1066196847/article/details/89029620
目的:从url中过滤出来top10000的url的数据

一、单独的使用Array或者Set 进行filter

val bbb=aaa.map(t=> (t._1,1)).reduceByKey(_+_).sortBy(-_._2).map(_._1).take(10000)

val aaa1=aaa.filter(t=> bbb.contains(t._1))

二、使用广播

val bbb=sc.broadcast(aaa.map(t=> (t._1,1)).reduceByKey(_+_).sortBy(-_._2).map(_._1).take(num).toSet)
val aaa2= aaa.filter(t=> bbb.value.contains(t._1))

使用第一种方法,会把bbb往每个task都拷贝一份,使用第二种方法只会把bbb往每个excutor上拷贝一份,所以不管从时间、内存上,第二种都要优于第一种

猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/89029620