火花循环和长血统拖累了评估

时间:2019-07-31 21:36:48

标签: scala apache-spark hadoop pyspark

在pyspark中,我需要进行一些操作并不断更改某些数据帧。

df = spark.sql("select * from my_table")
for iter in range(0,num_iter):
   for v in var_list:
     //....
     //Operations here that changes df
     df = f1()
     ..
     df = join(df, another dataset)
     df = f2(df)
     ..
     //There are some action here that should conclude DAG of this loop

我注意到,随着循环的进行,性能下降了。最初只需要几秒钟;经过几次循环后,每次迭代需要几分钟到几小时。从YARN检查,DAG似乎随着我们的前进而增长。在某些时候,执行程序会因显示非常长的DAG的错误而失败

DAG将以这种方式增长[仅作为示例,并不是仅通过联接操作来增长DAG] [DAG]

  1. 在这种情况下是否可以提高性能?是什么导致性能下降?如果是对象占用内存,是否有办法在每个循环之后刷新它们?

  2. 每个循环的cache()(具有后续操作)是否是避免DAG堆积的良好解决方法?我确实尝试过缓存,但性能仍然下降。

0 个答案:

没有答案