Spark Job通过本地操作完成转换(非常慢和OOM问题)

时间:2016-04-25 03:05:54

标签: apache-spark pyspark apache-spark-sql rdd spark-dataframe

我正在尝试编写一个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慢度问题的方法有任何建议?

1 个答案:

答案 0 :(得分:0)

假设我已正确阅读您的问题,您有一个RDD,其中每一行都是元组列表,而某些行最多可以有600K元组。

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

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