均匀分布数据

时间:2018-11-30 13:41:41

标签: scala apache-spark apache-spark-sql partitioner

我正在尝试解决数据框中的歪斜数据问题。我介绍了一个基于 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,那么多个记录将合并在一起,这将破坏重新分配数据的逻辑。

如果有人能够解释这种赔偿的奇怪行为,并帮助我纠正这一错误,那就太好了。

0 个答案:

没有答案