之前写过一篇文章,pyspark】parallelize和broadcast文件落盘问题,这里后来倒腾了一下,还是没找到 PySpark 没有删掉自定义类型的广播变量文件,因为用户的代码是一个 While True
的无限循环,类似下面的逻辑(下面的代码实际上 destroy
是可以删除落盘的广播变量文件的,但是用户的代码删不掉,因为没有仔细研究用户的代码 ,所以其实这个问题我感觉也不算 PySpark 的问题,只是在帮用户解决问题的时候另辟蹊径了 ,所以就记录下来了)。
class KK:
def __init__(self):
self._dummy = 'kk' * 10000000
self.m = 'k'
def test(k):
return k.value.m
def run():
k = KK()
a = sc.parallelize(list(range(1000)))
broad_k = sc.broadcast(k)
kk = a.map(lambda x: test(broad_k))
kk.collect()
broad_k.destroy()
while True:
run()
Driver 的磁盘大小有效,如果这些变量文件不删除,迟早会把磁盘刷爆,Driver 进程就可能会挂掉,所以后来想到一个比较猥琐的方法 ,就是每次 loop 结束之前,或者下一个 loop 开始之后,把临时目录的文件删一次 ,因为广播变量的文件路径是固定,这个在 python 里还是很好实现的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。