apache-spark - 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 时,我发现count
inrdd.mapPartitions(...).count()
只用了 11 秒,这意味着sc.broadcast(data)
大约需要 24 秒。如果我理解正确,Sparkdata
以一种懒惰的方式广播,因此sc.broadcast(data)
应该是一个便宜的操作,不应该花费那么多时间(24 秒)。我错过了什么吗?
更新:调整 gc 后,上面代码的总时间成本减少到大约 24 秒。sc.broadcast
仍然需要大约 10 秒。
解决方案
推荐阅读
- python - Pandas 检查给定列表中是否存在单元格中的单词(在许多单词中)
- react-native - React Native Pod 错误 - [!] 无效的 `Podfile` 文件:767:'' 处的意外令牌。| 相关问题 #448
- javascript - 将数组索引处的值更改为 falsey 会使数组稀疏吗?
- typescript - 泛型类型的 TypeScript 部分
- r - 在闪亮的服务器上找不到返回的 rmarkdown
- python - 如何检查对象是否为 np.array()?
- angular - 如何使用 php 后端更新 Angular Reactive 表单
- swift - URLSession.shared.dataTaskPublisher 在 IOS 13.3 上不起作用
- python - Django - 保存用户后获取用户ID
- c# - 通过 WPF 中的 wndProc 与另一个进程(相同的源代码)通信