Spark 中的循环分区是如何工作的?

2023-11-22

我很难理解 Spark 中的循环分区。考虑以下示例。我将大小为 3 的 Seq 分成 3 个分区:

val df = Seq(0,1,2).toDF().repartition(3)

df.explain

== Physical Plan ==
Exchange RoundRobinPartitioning(3)
+- LocalTableScan [value#42]

现在,如果我检查分区,我会得到:

df
  .rdd
  .mapPartitionsWithIndex{case (i,rows) => Iterator((i,rows.size))}
  .toDF("partition_index","number_of_records")
  .show

+---------------+-----------------+
|partition_index|number_of_records|
+---------------+-----------------+
|              0|                0|
|              1|                2|
|              2|                1|
+---------------+-----------------+

如果我对大小为 8 的 Seq 执行相同操作并将其分成 8 个分区,则会出现更严重的偏差:

(0 to 7).toDF().repartition(8)
  .rdd
  .mapPartitionsWithIndex{case (i,rows) => Iterator((i,rows.size))}
  .toDF("partition_index","number_of_records")
  .show

+---------------+-----------------+
|partition_index|number_of_records|
+---------------+-----------------+
|              0|                0|
|              1|                0|
|              2|                0|
|              3|                0|
|              4|                0|
|              5|                0|
|              6|                4|
|              7|                4|
+---------------+-----------------+

有人可以解释这种行为吗?据我了解循环分区,所有分区显示〜相同的大小。


(检查 Spark 版本 2.1-2.4)

据我所知ShuffleExchangeExec code,Spark 尝试直接从原始分区中对行进行分区(通过mapPartitions)而不给司机带来任何东西。

逻辑是从随机选择的目标分区开始,然后以循环方法将分区分配给行。请注意,为每个源分区选择“起始”分区,并且可能会发生冲突。

最终的分布取决于许多因素:源/目标分区的数量以及数据框中的行数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的循环分区是如何工作的? 的相关文章

随机推荐

  • Kafka Streams如何获取kafka headers

    我有下面的卡夫卡流代码 public class KafkaStreamHandler implements Processor
  • Rails ActiveRecord 创建或查找

    我正在开发 Rails 4 应用程序 在我的 api 的 post 方法中 我想根据用户尝试创建的内容查找记录 如果它不存在 则创建它 如果它确实更新它的参数有 我编写了一些实际执行此操作的代码 但执行起来需要一些时间 有没有其他方法可以用
  • 从 SSRS 2005 (VB.NET) 中的字符串中去除 HTML

    my SSRS数据集返回一个 HTML 字段 例如 b blah blah b i blah i 如何去除所有 HTML 标签 必须完成inline VB NET 更改表中的数据不是一种选择 找到解决方案 System Text Regul
  • 调整背景图像大小以适合

    我试图使背景图像尽可能专业 所以我认为最好根据浏览器的大小或分辨率调整它的大小 不确定通常使用什么 但我认为浏览器大小在这里有意义 这个想法是 如果查看器屏幕较小 则背景图像会变小 并且随着屏幕变大 图像会扩展以适合其最大尺寸 我会根据需要
  • Phylo BioPython 构建树木

    I trying to build a tree with BioPython Phylo module What I ve done so far is this image 每个名称都有一个四位数字 后跟 和一个数字 该数字指的是该序列
  • 动态更改选项卡文本标题

    我在 viewpager 下有一个带有四个选项卡的选项卡 我想在滑动选项卡时更改文本标题 我的问题是我无法分别处理选项卡 例如四个选项卡标题是 1 2 3 4 当我滑动时 它会显示为 1 9 3 4 或 1 2 9 4 但在我的例子中是 7
  • 从 aov 中提取 p 值

    我正在寻找从 R 中的方差分析生成的 p 值 这是我正在运行的 test lt aov asq 9 asq 187 summary test Yields Df Sum Sq Mean Sq F value Pr gt F asq 187
  • 如何避免在番石榴中延迟应用Lists.transform?

    Map
  • 使用命令输出中引用的条目在 Bash 中创建数组

    我在从标准输出形成 bash 数组时遇到问题 我把它归结为这个最小的例子 a echo 1 2 3 foo bar echo a 0 1 echo a 1 2 echo a 2 3 echo a 3 foo echo a 4 bar 我相信
  • 在 Julia 中检索 RNG 种子

    在 Julia 中 全局 RNG 的种子可以设置为 srand SEED 我如何检索全局 RNG 的种子或当前状态 例如稍后再来一次 目标是在任何给定时间点获取 RNG 的状态 并在不同的会话中重新创建它 而无需知道初始种子或同时发生的对
  • 关于linux设备驱动中的register_chrdev_region()的问题

    我正在学习如何注册内核模块register chrdev region dev t from unsigned count const char name 我注意到无论有没有这个函数 我的内核模块都按预期工作 我用于测试的代码 first
  • 如何使用 IIS 7.5 更改可以在表单中发布的字段数量?

    我们的网络应用程序的管理部分中的某些表单遇到了问题 有少数表单包含大量字段 范围可以从一个输入字段到数百个 我们发现 随着这些表单的增长 在发布表单时 服务器会抛出 500 个错误 经过测试 我发现服务器可以处理包含 100 个字段的表单
  • 单个单元格的计数器增量

    这篇文章源于我的问题将单元定义扩展到单元框架标签 我一直在玩CounterIncrements我没有得到我所期望的 正如西蒙在对我提到的帖子的回答中所做的那样 我们首先生产一个计数器 CellPrint Cell Setting the c
  • 使用 CASE WHEN 在 postgresql 中创建数据透视表的正确方法

    我正在尝试在 postgresql 中创建一个数据透视表类型视图 并且已经快到了 这是基本查询 select acc2tax node acc tax node name tax node rank from tax node acc2ta
  • 如何让 Valgrind 调试器单步执行程序

    早上好 我正在尝试使用 Valgrind 调试器单步调试程序 我的 valgrind 命令行是valgrind tool memcheck leak check full db enable yes MatchUpAcurate exe 我
  • 防止控制台应用程序在未从现有终端调用时关闭?

    这类问题有很多变体 然而 我特别寻求一种方法来防止 Python 中的控制台应用程序在未从终端 或其他控制台 因为它可能在 Windows 上调用 调用时关闭 可能发生这种情况的一个示例是双击 py来自 Windows 资源管理器的文件 通
  • 使用实体框架的 System.OutOfMemoryException?

    我正在尝试使用实体框架保存数十万条记录 保存数十万条记录后 我收到以下错误 系统内存不足异常 My code foreach BibContent objbibcontents in lstBibContent db BibContents
  • 通过 Python3 使用 Selenium 和 WebDriver 切换选项卡时出现“NoSuchWindowException:没有这样的窗口:窗口已关闭”

    我有一个表单 当我单击它时会在新选项卡中打开 当我尝试导航到该新选项卡时 我不断收到 NoSuchWindowException 代码非常简单 myframe 是新选项卡中的框架 信息最终将插入其中 我应该等待其他事情吗 from sele
  • 使用 C# 设置 CPU 的关联性

    我已经用 C 创建了一个窗口应用程序 现在我想设置该应用程序的 CPU 亲和力 我可能有 2 个处理器 4 个处理器 8 个处理器或可能超过 8 个处理器 我想使用接口的输入来设置 cpu 关联性 我怎样才能做到这一点 如何使用Enviro
  • Spark 中的循环分区是如何工作的?

    我很难理解 Spark 中的循环分区 考虑以下示例 我将大小为 3 的 Seq 分成 3 个分区 val df Seq 0 1 2 toDF repartition 3 df explain Physical Plan Exchange R