我正在处理一个经过union、groupByKey和mapGroups操作的数据集,然后再进行其他操作。
我意识到mapGroups操作后数据分布不均匀,所以我在上面的mapGroups操作后立即运行了repartition & cache。令人惊讶的是,数据仍然是倾斜的,几乎没有任何重新分区的影响!
我的第一次尝试是使用just .repartition(Number)。
数据集是一个case类,它有多个数组字段和其他内容,所以我将其更改为类似.repartition(Number,ds(“id_field”))的内容,假设数组字段会扰乱重新分区,但数据倾斜仍然没有变化。
我还添加了ds.count()操作,以在最后提交之前强制触发器重新分区,并且仍然没有改变数据偏差。
我还尝试更改ds.rdd.repartition().toDS,仍然没有任何更改
在这一点上,我的想法跑出来。
我使用的是2001分区,最大的分区是~80 MB,最小的是2 MB。
你知道我该怎么解决这个数据不对称问题吗?
1条答案
按热度按时间nvbavucw1#
您可以尝试
Key Salting
选项。在这种方法中,您添加一个新键以确保数据的均匀分布。向数据集添加一个具有均匀分布值的新列,并使用该列和旧键进行联接。