当前位置: 首页 > 知识库问答 >
问题:

是否可以“均匀”地合并Spark分区?

寇升
2023-03-14

我可以使用这个问题中的技巧来强制初始分区和最终分区之间的关系,但是Spark不知道每个原始分区的所有内容都将转移到一个特定的新分区。因此,它不能优化掉洗牌,而且它的运行速度比coalesce慢得多。

共有1个答案

万知
2023-03-14

在您的示例中,您可以安全地将2048个分区合并为32个,并假设Spark将均匀地将上游分区分配给合并的分区(在您的示例中,每个分区为64个)。

以下是rdd#coalesce的Scaladoc的摘录:

这导致了一个狭窄的依赖关系,例如,如果您从1000个分区到100个分区,将不会出现洗牌,相反,100个新分区中的每个将占用当前分区的10个。

(2)实现每个分区的局部性,即找到一个最多父分区喜欢的机器

(3)高效,即n个父划分的O(n)算法(问题可能是NP-hard)

(4)平衡优选机,即尽量避免选择同一优选机

 类似资料:
  • 我们有一个带有操作的管道,分成两个工作负载-在第一组中,是CPU密集型的工作负载,它们被放入同一个插槽共享组,比方说。和,因为它使用大容量上载并在内存中保存大量数据。它被发送到插槽共享组。 此外,工作负载和工作负载的并行度级别不同,因为第一个工作负载受源并行度的限制。例如,我们的并行度为50,同时并行度等于78。我们有8个TMs,每个有16个内核(因此也有插槽)。 在这种情况下,理想的插槽分配策略

  • 我有一个有几个消费者的消费群体。每个使用者被分配到一组分区。消费者何时轮询选择了已使用分区的消息?它是在消费者端完成的,还是Kafka服务器决定使用哪个分区? 我的一些分区有很多消息,但有些分区没有或几乎没有。但我仍然需要我的消费者平等地使用分配给它的每个分区。因此,我需要我的消费者快速遍历分区,最好从每个分配的分区轮询x条消息。 我在用https://github.com/appsignal/r

  • 0.1-0.2:********** 0.2-0.3:******** 0.3-0.4:********* 0.5-0.6:********* 0.6-0.7:********* 0.7-0.8:********* 0.4-0.5:********* 0.5-0.6:********* 0.6-0.7:********* 0.1-0.2:********* 0.2-0.3:********* 0.

  • 我们在AWS上运行16个节点kafka集群,每个节点是m4. xLargeEC2实例,具有2TB EBS(ST1)磁盘。Kafka版本0.10.1.0,目前我们有大约100个主题。一些繁忙的话题每天会有大约20亿个事件,一些低量的话题每天只有数千个。 我们的大多数主题在生成消息时使用UUID作为分区键,因此分区分布相当均匀。 我们有相当多的消费者使用消费群体从这个集群消费。每个使用者都有一个唯一的

  • 问题内容: 比如有收藏,,。任何避免迭代器循环的方法都可以通过Java 8流API交错这些集合以获得以下结果- 吗? 问题答案: 我不确定Stream API是否有更简单的方法,但是您可以在所有列表的索引上使用流来考虑以下问题: 这将获得给定列表中最大列表的大小。然后,对于每个索引,它使用该列表中每个列表的元素在该索引处形成的流(如果该元素存在的话)进行平面映射。 然后,您可以将其与 使用prot

  • 问题内容: 我知道如果我使用Java的Random生成器,并使用nextInt生成数字,则数字将均匀分布。但是,如果我使用2个Random实例,并使用两个Random类生成数字,会发生什么。数字是否会均匀分布? 问题答案: 每个实例生成的数字将均匀分布,因此,如果将两个实例生成的随机数序列组合在一起,则它们也应均匀分布。 请注意,即使结果分布是均匀的,您也可能要注意种子,以避免两个生成器的输出之间