"关闭循环Pysp后的中间文件"

2024-04-24 22:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个pyspark脚本来在配置单元数据库中的表中循环,并对它们执行一些操作(不能确切说明每个公司策略的具体内容),例如:

hc = HiveContext(sc)
for table in tables:
    df = hc.sql("select * from {}".format(table))
    df.do_something()
    df.unpersist()

它工作正常,直到我得到几个表,然后我得到一个错误:

ERROR DiskBlockObjectWriter:...
java.io.FileNotFoundException ... (Too many open files)

这是因为spark在shuffle之前创建的所有中间文件。你知道吗

我想我可以通过在使用数据帧(df.unpersist())并进入下一个循环之后立即取消数据帧(df.unpersist())的持久化来避免这种情况,但这似乎没有帮助。你知道吗

有没有一种方法可以在使用之后和下次循环之前关闭所有打开的文件?一旦我完成了每一个循环,我就不再需要那个df了。我确信它失败的特定表没有问题,因为只要我以前没有打开过太多其他表,我就可以将该特定表读入DF。你知道吗


Tags: 文件数据hc脚本数据库dftable公司