有人能用一个实际的例子来解释ENSURE_REQUIREMENTS是如何起作用的吗?
阅读对这个题目并不真正清楚。
我看了这里https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/EnsureRequirements.scala,但不知道它是什么。某种保险的Spark,事情进展顺利?我发现文档晦涩难懂。
你可以参考我的另一个SO问题:在那里我做了实验,但没有得到为什么会发生这种情况的要点。
我的同事也解释不了。
1条答案
按热度按时间sg3maiej1#
让我们假设我们想找出天气如何影响游客访问 akka 迪亚国家公园:
值得注意的是,a)Spark决定使用10个分区对两个数据集进行洗牌,以计算平均值并执行连接,b)两种情况下的洗牌原点都是
ENSURE_REQUIREMENTS
。假设 visits 数据集非常大,因此我们希望提高统计数据计算的并行性,并将其重新分区为更大的数字。
这里,
REPARTITION_BY_NUM
shuffle origin要求有100个分区,所以Spark优化了另一个ENSURE_REQUIREMENTS
,origin也使用了100个分区,这样就不需要再进行一次shuffle了。这只是一个简单的例子,但我相信Spark可以对包含
ENSURE_REQUIREMENTS
原点的shuffle的DAG应用许多其他优化。