我正在尝试解决数据框中的歪斜数据问题。我介绍了一个基于 bin打包算法的新列,该列应将数据均匀分布在bin中(本例中为分区)。我对垃圾箱的计数是 500,000 行。 我为每行分配了一个箱号,该行应属于该箱。仓数范围为 1到282 。假设列名称为键。
理想情况下,当我基于列键对数据框执行重新分区操作时,它应该在 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并根据键列在对rdd上进行操作。但是Key列最初可以有重复项,如果I groupBy,那么多个记录将合并在一起,这将破坏重新分配数据的逻辑。
如果有人能够解释这种赔偿的奇怪行为,并帮助我纠正这一错误,那就太好了。