Spark 作业使用本地操作包装转换(非常慢和 OOM 问题)



我正在尝试编写一个以各种方式分析时间序列的 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 仅按行分区,因此具有大量列的行无法将其列分布在分区之间,这会导致内存不足错误。

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

相关内容

  • 没有找到相关文章

最新更新