为啥 sortByKey 的火花这么慢?他们有啥替代方案吗?
Posted
技术标签:
【中文标题】为啥 sortByKey 的火花这么慢?他们有啥替代方案吗?【英文标题】:Why is sortByKey so slow in spark? Is their any alternative for that?为什么 sortByKey 的火花这么慢?他们有什么替代方案吗? 【发布时间】:2016-03-17 16:06:48 【问题描述】:每当我在我的程序中使用 sortByKey 时,它都会挂起!他们是在 Spark 中对 RDD 进行排序的更有效方法吗? RangePartitioner 呢?他们是一种使用 RangePartitioner 进行排序的方法吗?我的 RDD 类型为 [(Integer, SomeType)]
。排序后,我使用 RangePartitioner 对数据进行分区,并使用 mapPartitions 对其进行进一步处理。在那种情况下,对 RDD 进行排序的最优雅的方式是什么?基本上,我希望在开始使用 mapPartitions 之前对我的 RDD 进行排序。
【问题讨论】:
需要有关您的数据集以及如何对其进行分区的更多信息。你真的需要排序吗?通常这只是一个中间步骤,无法通过其他方式完成。 @TheArchetypalPaul:我在我的问题中添加了更多信息。 假设整数随机分布在你的数据集中(即你的 RDD 是随机排序的),排序将涉及 n log n 比较和节点之间的大量数据移动。这总是会花费大量时间(O(n log n),但由于数据移动成本高昂,因此具有重要的常数因素) 那么,我们该如何改进呢?有什么建议么? RangePartitioner 是否进行任何排序?即使一个分区的所有元素都小于下一个分区的所有元素,我也可以接受。 RangePartitioner 会这样做吗? 如果你看源码,sortByKey使用RangePartitioner,那么再次使用它真的不太可能有帮助吗?了解您的实际用例在这里真的很有帮助... 【参考方案1】:Spark 不用于排序。 如果它挂起,则意味着您正在尝试对非常大的数据集进行排序。
问问自己,您将如何处理数百万已排序的结果集? 请改用 takeOrdered。
【讨论】:
以上是关于为啥 sortByKey 的火花这么慢?他们有啥替代方案吗?的主要内容,如果未能解决你的问题,请参考以下文章