我在 pyspark 上运行一个应用程序。对于这个应用程序,下面是执行者分布的快照。它看起来像非均匀分布。有人可以看看并告诉问题出在哪里。
描述和我的问题:-
我在大量数据上运行我的应用程序,其中我正在过滤和加入 3 个数据集。之后,我缓存连接的数据集以生成和聚合不同时间段的特征(意味着我的缓存数据集在循环中生成特征)。在此之后,我尝试将这些功能存储在 partquet 文件中。这个 parquet 文件占用了太多时间。
任何人都可以帮我解决这个问题吗?如果您需要更多信息,请告诉我。
虽然我最初的建议是尽可能少地使用像连接这样的洗牌操作。但是,如果您希望坚持下去,我可以提供的一些建议是通过以下方式调整您的 SparkContext:
正如你所说(强调我的):
我正在过滤并加入3 个数据集。之后,我正在缓存连接数据集以生成和聚合特征
如果连接键或分组列不是均匀分布的,则连接和在较小程度上聚合可能会导致数据分布偏斜 - 这是所需洗牌的自然结果。
在一般情况下,您几乎无能为力。在特定情况下,广播或加盐可能会有所收获,但在您的情况下,问题似乎并不特别严重。