首页 > 解决方案 > Spark广播时间长

问题描述

我有以下 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 时,我发现countinrdd.mapPartitions(...).count()只用了 11 秒,这意味着sc.broadcast(data)大约需要 24 秒。如果我理解正确,Sparkdata以一种懒惰的方式广播,因此sc.broadcast(data)应该是一个便宜的操作,不应该花费那么多时间(24 秒)。我错过了什么吗?

更新:调整 gc 后,上面代码的总时间成本减少到大约 24 秒。sc.broadcast仍然需要大约 10 秒。

标签: apache-sparkbroadcast

解决方案


推荐阅读