我有一个关于计算后写结果的火花的问题。我知道,每个执行器在完成分区工作后,都会将其结果写回HDFS/local-文件系统(基于所使用的集群管理器)。
这是有意义的,因为如果不需要任何结果聚合,则不需要等待所有执行器完成并将结果写回。
但是,当数据需要按升序或降序在特定列(例如ID)上排序时,写操作是如何工作的?
在开始计算之前,spark的逻辑计划是否会首先根据每个执行器的ID对分区进行排序?在这种情况下,任何执行程序都可以先完成并开始将其结果写入HDFS,那么整个框架如何确保最终结果得到排序?
提前感谢
发布于 2021-11-18 09:03:08
从这个答案中我了解到:https://stackoverflow.com/a/32888236/1206998排序是一个使用RangePartitioner将所有数据集项洗牌到“排序”分区中的过程:分区之间的“边界”是作为数据集样本中的百分位数项选择的项。
所以,就像:
number
F 216)
如果我们有dataset [1,5,6,8, 10, 20, 100] (按任何顺序分布)并将其排序为3个分区,则会提供:
[1,5,6] (sorted within partition)
[8,10] ( " )
[20,100] ( " )因此,以后的任何操作都可以独立地对每个分区执行,包括编写。
请记住:
locally.
)。
https://stackoverflow.com/questions/70002905
复制相似问题