我有下面的Spark代码来广播一个大的 Array[Array[Int]] data
.
val timeBeg = System.currentTimeMillis
val dataBc = sc.broadcast(data)
rdd.mapPartitions(_ => Iterator(dataBc.value.length)).count()
val timeEnd = System.currentTimeMillis
println((timeEnd - timeBeg) / 1000.0)
在这里, rdd.mapPatitions(...).count()
用于立即广播 data
. 密码花了35秒。然而,当我查看spark ui时,我发现 count
在 rdd.mapPartitions(...).count()
只花了11秒,也就是说 sc.broadcast(data)
花了大约24秒。如果我理解正确的话,spark广播 data
以懒惰的方式,因此 sc.broadcast(data)
应该是一个廉价的操作,不应该花那么多时间(24秒)。我错过什么了吗?
更新:在调优gc之后,上面代码的总时间开销减少到大约24秒。 sc.broadcast
还需要10秒。
暂无答案!
目前还没有任何答案,快来回答吧!