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