【问题标题】:Is there a way to make spark re-partition by size rather than count of the data有没有办法让火花按大小而不是数据计数重新分区
【发布时间】:2025-12-09 13:05:03
【问题描述】:

我有一个数据集被每个分区的记录数平均划分,但某些分区的数据大小是其他分区的 4 倍或更多倍。每条记录都有一个集合,我想在某些记录中可能会更大。由于这种不平衡的记录,这会导致看起来像数据倾斜的一些分区需要更长的时间。 如果我可以在 Spark 中启用一些日志记录以打印每个正在处理的分区的字节大小和行的大小,这可以帮助我进行故障排除。因为数据正在使用他们的 Spark 连接器发送到 Cassandra,该连接器正在自己进行一些重新分区。

【问题讨论】:

  • 请检查这个答案 - *.com/questions/61338374/…
  • 我已经在重新分区,它们的记录数几乎相同。我认为由于行包含数组,因此差异可能很大。您的链接似乎表明我至少可以在 spark 运行时记录大小或每个分区或行。这将有助于解决此问题。

标签: apache-spark dataset skew


【解决方案1】:

无法按大小重新划分数据集。就我而言,我有一个数组,其中一些行将包含大量条目。这个结果是数据的异常,我能够通过简单地向数据集添加过滤器来过滤掉这些行。

df.filter( size($colname) < 1000)

【讨论】: