关于Spark中的常见问题及解决方法(4) —— Join操作

前言

Join和Aggregation操作都可能引起Shuffle,所以这类问题一般具有相似的症状和解决办法。

主要症状

  • Join stage可能一直在运行,它可能包含一个或者多个task。
  • 该Join stage前后的stage看起来一切正常。

可能的解决方法

  • 许多Join可以被手动或自动)优化到其他类型的连接。

  • 尝试不同的连接顺序也许可以发现较快连接组合,特别是当其中一些连接过滤掉大量数据, 先做那些。

  • 对数据集进行分区对于减少群集中的数据移动非常有用,尤其是在多个连接操作中将使用相同的数据集时。 可以尝试join前的不同分区组合, 但这会引起shuffle。

  • Join操作缓慢也可能是由于数据偏差造成的。 可以调整Spark应用程序和/或增加executor的大小等。

  • 在Join操作之前使用SELECT等操作过滤选出需要处理的数据,避免处理无关的数据。 Spark的查询优化器将自动为结构化API执行此操作。

  • -确保数据中的空值被正确表示(使用Spark的null概念)而不是像”“或”EMPTY“那样的默认值。 Spark通常会尽可能优化,在作业早期跳过空值,但对于其他自定义的占位符值,并没有这样的优化机制

  • 有时,如果Spark不知道有关输入DataFrame或表的任何统计信息,则Spark无法正确规划广播(broadcast)连接。 如果你知道要join中的一个表很小,则可以尝试强制广播

参考资料

[BOOK] Spark - The Definitive Guide

posted @ 2019-03-30 10:31  LestatZ  阅读(791)  评论(0编辑  收藏  举报