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 仅按行分区,因此具有大量列的行不能将其列分布在分区之间,这会导致内存不足错误。
如果是这个原因,您可能需要增加集群容量或重组数据,以便每个元组都在自己的行上。
我正在尝试编写一个以多种方式分析时间序列的 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 仅按行分区,因此具有大量列的行不能将其列分布在分区之间,这会导致内存不足错误。
如果是这个原因,您可能需要增加集群容量或重组数据,以便每个元组都在自己的行上。