【pyspark】parallelize和broadcast文件落盘问题(后续)

时间:2022-07-23
本文章向大家介绍【pyspark】parallelize和broadcast文件落盘问题(后续),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

之前写过一篇文章,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 里还是很好实现的。