Pyspark执行者的任务和数据的非统一分布

时间:2017-09-07 10:15:29

标签: python pyspark executors

我在pyspark上运行一个应用程序。对于此应用程序,下面是执行程序分发的快照。它看起来像是非均匀分布的。有人可以看看并告诉问题在哪里。

enter image description here

描述和我的问题: -

我在大量数据上运行我的应用程序,我正在过滤并连接3个数据集。之后,我正在缓存已加入的数据集,用于生成和聚合不同时间段的功能(意味着我的缓存数据集在循环中生成功能)。在此之后,我正在尝试将这些功能存储在partquet文件中。这个镶木地板文件花费了太多时间。

能帮助我解决这个问题吗?如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

虽然我最初的建议是尽可能多地使用像连接一样的shuffle操作。但是,如果你想坚持下去,我可以提供的一些建议是通过以下方式调整你的SparkContext:

  • 使用Kryo Serializer
  • 通过网络发送前压缩数据
  • 使用JVM垃圾回收
  • 增加你的随机记忆

答案 1 :(得分:0)

如你所说(强调我的):

  

我正在过滤并加入 3个数据集。之后,我正在缓存已加入的数据集以生成和聚合功能

如果连接键或分组列不是均匀分布,则连接和较小程度上的聚合可能会导致数据的分布偏差 - 这是所需shuffle的自然结果。

一般情况下,你可以做的很少。在特定情况下,可以通过广播或腌制获得一点点,但看起来问题在您的情况下并不是特别严重。