1

我正在尝试解决数据框中的倾斜数据问题。我引入了一个基于bin 打包算法的新列,它应该在 bin(在我的例子中是分区)之间均匀分布数据。我对垃圾箱的计数是500,000行。我已经为每一行分配了该行应该属于的 bin 编号。bin 计数范围从1 到 282。假设列名是key

理想情况下,当我根据列键对数据帧进行重新分区操作时,它应该在282 个分区之间均匀分布数据,每个分区包含大约500,000条记录。

| key |count |
+-----+------+
|1    |495941|
|2    |499607|
|3    |498896|
|4    |502845|
|5    |498213|
|6    |501325|
|7    |502355|
|8    |501816|
|9    |498829|
|10   |498272|
|11   |499802|
|12   |501580|
|13   |498779|
|14   |498654|
...
...
|282  |491258|

但仍有一些分区包含多个键。例如,分区101115合并为1 个分区,这对我来说是意想不到的行为。

+----+------+
|key |count |
+----+------+
|101 |500014|
|115 |504995|
+----+------+

如果我编写一个自定义分区器,那么我必须将我的数据帧转换为 rdd 并根据键列对 pair-rdd 进行操作。但是Key列最初可以有重复,如果我groupBy,那么多条记录将被组合在一起,它会破坏重新分区数据的逻辑。

如果有人能解释这种奇怪的修复行为帮助我纠正它,那就太好了。

4

0 回答 0