强制(Py)Spark以均衡的方式将分区分配给所有执行者

时间:2019-04-18 15:18:16

标签: python apache-spark

所以我正在加载一个约500万行,约80列的数据框。

其中一列称为X,它具有约17000个唯一的字符串值,并且值计数分布良好且均匀(即,没有X的值过于频繁)。

我想按X分组数据,并为其余的列做一些汇总指标。因此,我认为最好先在X上分区并缓存数据。

df.repartition(400, 'X')
df.cache().count()

但是, 所有缓存的数据最终都存储在单个执行器上 ,这对于随后的分析非常不理想。

有趣的是,删除了“ X”上的分区后:

df.repartition(400)
df.cache().count()

数据均匀地分布在所有节点上。

问题:

  • 为什么在X上分区的缓存数据最终在单个执行器上结束?
  • 通常,是否有一种方法可以在所有节点之间以平衡的方式重新分配缓存的数据?
    • 我特别考虑使用动态分配时的情况-一个人可以突然获得新的新节点,这些节点将因此没有数据,而将所有工作留给已经存在的节点...

0 个答案:

没有答案