apache-spark - 如何在同一个执行器上拆分 Spark 中的分区?(合并的反面)
问题描述
有没有什么方法可以在不通过网络和 shuffle 的情况下拆分 Spark 分区,例如
# p stands for partition
machine 1:
p1: 1,2 p2: 3,4
machine 2:
p3: 5,6 p4: 7,8
我想要的是
machine 1:
p1:1, p2:2, p3:3, p4:4
machine 2:
p5:5, p6:6, p7:7, p8:8
有没有办法做到这一点?(我认为这里没有网络传输和洗牌)
PS:
这是相反的coalesce
,如果我打电话,coalesce(2)
那么我想它会是
machine 1: p1: 1,2,3,4 machine 2: p2: 5,6,7,8
哪里数据不通过网络,不会调用shuffle,并且coalesce(1)
会因为机器2中的数据都到机器1而导致网络传输?
解决方案
如果repartition
应用程序代码以某种方式编写,API 可以提供帮助
读取数据集并使用 column 重新分区
a
。这将导致跨网络的完全洗牌,这意味着为 的每个唯一值创建一个分区a
。一旦步骤 1 完成,如果您现在对列上的数据集进行重新分区
a
,b
这将导致以最少的随机播放创建新分区。
您可以在此处阅读有关 Hash Partitioner 的更多信息 - HashPartitioner 如何工作?
推荐阅读
- sql - 表 EMP 正在变异,触发器/函数可能看不到它错误
- docker - Docker 在 NPM 安装时被阻止 - 套接字超时
- python - Python - 请求 - JSONDecodeError
- c# - WPF如何使用MVVM模式将值绑定到TextBox correclty
- bootstrap-4 - 在 BS4 中对齐并排嵌套的 div
- java - 集成测试:java.lang.IllegalStateException:无法解开代理对象
- docker - 从家庭 TIBCO EMS 服务器切换到辅助 TIBCO EMS 服务器后,WSO2 ESB 无法重新连接到 TIBCO JMS 服务器
- javascript - Socket.io 无法连接到 Android 浏览器上的 localhost
- php - Swift - PHP:发送到 PHP 的文本字段值被接收为 null
- python - 我们可以通过理解来做到这一点吗?