You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark中df.show()函数执行算法及数据拉取的Executor选择规则问询

Spark df.show() 拉取记录的节点规则

df.show()本质是Spark的Action算子,默认返回前20条数据,底层调用take(n)算子实现,拉取记录的节点规则完全遵循take算子的执行逻辑:

  • 优先按分区序号从小到大拉取:Spark的DataFrame分区是天然有序的,take(n)会先尝试从序号最小的第一个分区拉取所有数据,如果该分区的记录数已经≥需要展示的n条,就直接结束拉取,仅会请求第一个分区所在的Executor节点;如果第一个分区记录不足n,再依次请求第二个、第三个分区所在的Executor,直到拿够n条数据为止,后续分区的Executor不会被访问。
  • 遵循本地性调度规则:如果目标分区的副本和Driver在同一节点,会优先读取本地副本,不走网络传输;如果目标分区所在的Executor正常存活,就直接从该Executor拉取分区数据,仅当Executor宕机时,才会触发容错机制重新计算对应分区后再拉取。
  • 全局排序后调用show的特殊规则:如果你的DataFrame执行过orderBy全局排序操作后再调用show,全局排序会将数据重新shuffle为有序的新分区,依然按照上述规则从新的最小编号分区所在的Executor拉取数据;如果是orderBy().limit(n).show()的写法,Spark会做优化:先在所有存有待排序数据的Executor节点上计算本地TopN,再把所有节点的本地TopN拉取到Driver端合并为全局TopN,此时会从所有参与排序计算的Executor节点拉取数据。

举个实际例子:你调用df.show(50),如果DataFrame第一个分区有70条数据,全程只会请求第一个分区所在的Executor,其他Executor不会收到任何拉取请求;如果第一个分区只有30条数据,会额外请求第二个分区所在的Executor,拿20条数据就结束。

内容的提问来源于stack exchange,提问作者Sumitav Jena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:54:04