Spark Job Wrapping a Transformation with Local Operations(非常慢和 OOM 问题)

Spark Job Wrapping a Transformation With Local Operations (Very Slow and OOM Problems)

我正在尝试编写一个以多种方式分析时间序列的 Spark 作业。通过一系列转换,我将一个数据框放入 rdds,这样我的行结构如下:

Row[((tuple, key) t1, t2, t3, t4, t5, ...)]

我们称这个为 rdd:rdd.

我调用 rdd.flatMap(foo(r[1:])),我希望 foo 在输入时获取时间列表,并在输出时提供分析列表。

假设

def foo(times):
    return [average(times), percentile(times, 25)]

当我 运行 完成这项工作时,它需要很长时间,而且我会遇到 OOM 导致一切失败的错误。 times 不应超过 600K 项,这就是超级异常情况。最有可能在 10K - 100K.

之间

我不能使用reduceByKey(),因为我需要执行的操作需要查看整个时间序列并来回多次。

有没有人对解决这个 OOM 缓慢问题的方法有任何建议?

假设我没看错你的问题,你有一个 RDD,其中每一行都是一个元组列表,有些行最多可以有 600K 个元组。

在不知道您的集群配置或查看实际代码的情况下,我只能推测。我最好的猜测是,由于 Spark 仅按行分区,因此具有大量列的行不能将其列分布在分区之间,这会导致内存不足错误。

如果是这个原因,您可能需要增加集群容量或重组数据,以便每个元组都在自己的行上。