循环Pyspark后关闭中间文件

时间:2017-12-19 20:19:59

标签: python apache-spark dataframe pyspark

我编写了一个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)

这是因为在shuffle之前spark创建了所有中间文件。

我认为我可以通过在使用它并进入下一个循环之后立即取消数据框(df.unpersist())来避免这种情况,但这似乎没有帮助。

有没有办法可以在使用后和下一个循环之前关闭所有打开的文件?一旦我完成每个循环,我就不再使用该df了。我确信特定的表没有问题,它失败了,因为只要我还没有打开过多的其他表,我就可以把这个特定的表读成DF就好了。

0 个答案:

没有答案