【发布时间】:2017-05-23 23:45:52
【问题描述】:
我使用的是 spark 2.1,并且在 spark 中遇到了内存泄漏,特别是在使用 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?
【问题讨论】:
-
当你在没有计数的情况下做减法时,你的意思是在循环中没有计数还是根本没有计数..甚至在循环外?
-
完全没有计数。
-
好吧,如果没有计数,即没有动作......无论你在里面做什么都不会真正执行。尝试在循环外计数,看看你是否得到了你想要的结果..
-
我需要在循环内计数,至少在减法之后才能完成我想要完成的工作。
-
我在一个新问题中添加了一个读取运行示例。 stackoverflow.com/questions/44146738/spark-memory-leak
标签: python apache-spark memory-leaks pyspark