我正在尝试解决数据框中的倾斜数据问题。我引入了一个基于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|
但仍有一些分区包含多个键。例如,分区101和115合并为1 个分区,这对我来说是意想不到的行为。
+----+------+
|key |count |
+----+------+
|101 |500014|
|115 |504995|
+----+------+
如果我编写一个自定义分区器,那么我必须将我的数据帧转换为 rdd 并根据键列对 pair-rdd 进行操作。但是Key列最初可以有重复,如果我groupBy,那么多条记录将被组合在一起,它会破坏重新分区数据的逻辑。
如果有人能解释这种奇怪的修复行为并帮助我纠正它,那就太好了。