火花内存泄漏

时间:2017-05-23 23:45:53

标签: python apache-spark memory-leaks pyspark

我在火花2.1上遇到了火花中的内存泄漏,特别是在使用pyspark的subtract功能时。我在一个循环中运行它,其中减去的数据帧最终应该达到0,但我看到的是驱动程序上的内存使用量继续增加,直到它死亡。

for row in counts_df.collect():
    customer_df = all_grouped_df.select('name').where(all_grouped_df.customer == row['customer'])

    pre_count = all_df.count()

    all_df = all_df.subtract(customer_df)

    post_count = all_df.count()

    diff_count = pre_count-post_count
    # do some other stuff

在我看来all_df = X实际上并没有覆盖以前的对象?这是我可以得出的唯一结论,因为all_df中的数据随着每个循环而减少。

有没有办法绕过这种或不同的方式来实现subtract功能?

编辑:我只用减法函数运行它(没有计数),它似乎没有泄漏任何东西。我想泄漏可能与我如何运行count

有关

1 个答案:

答案 0 :(得分:0)

您的问题:

  1. 当您对数据框进行操作时,它将完全创建一个新的数据框。尤其不是动作方法。

  2. 我也感到困扰。很好,我想您是该死的火花开发人员陷入的两个陷阱。数据血统会随着“ all_df = all_df.substract”的增加而增加,每次创建新的df时,数据关系就会延长,而旧的df不会因为引用它们而被删除。

因此,要么由于数据沿袭时间过长而导致堆栈溢出,要么由于内存中保留的数据帧过多而导致内存激增。