在一个spark数据帧操作中,我发现每个任务的输入大小(MB)变化很大。有些任务的大小接近1GB,而其他任务的大小为15MB。较高的输入大小导致执行程序丢失。
我知道调整 spark.yarn.executor.memoryOverhead 会使它在某些时候起作用。但我想知道,有什么方法可以重新分区DataFrame,以便每个分区的大小不超过给定的大小(MB)。
答案 0 :(得分:0)
您需要明确确保分区本身的大小正确。这是 partiion-time 任务,而不是运行时/任务执行时间。选项包括:
增加分区数量。这是一种钝器/蛮力方法:你最终会得到更多你想要的分区 - 即使这可能是任何输入源都可行的。但是处理许多额外的分区实际上并非所有 坏。它为处理添加了一小部分额外时间。
更好的方法。仔细考虑数据如何分区并可能对其进行改进以避免偏差。这可能需要额外的处理步骤来重新分区或更改分组。
再一次,这不能在任务执行时修复:它需要重新处理数据分发 - 因为它以它使用的分区的形式呈现给Spark调度程序发送给工人。