首页 > 解决方案 > Spark迭代算法UDF在每次迭代中被多次触发

问题描述

我在 Spark 中运行一个迭代循环。每次迭代都会生成一个数据框,然后该数据框将成为下一次迭代的输入。该程序包含一个在每次迭代中调用的 UDF。每次迭代后,我将值分配给新数据帧并将旧数据帧写入 hdfs。然后新的数据框成为我下一次迭代的输入。我观察到的问题是我的 UDF 被多次调用。DAG 每个时间步都会变长,UDF 会被多次调用。我该如何防止这种行为。由于性能原因,我不会使用缓存和/或检查点,同时我不能承受多次调用 UDF。

标签: apache-sparkpysparkuser-defined-functions

解决方案


哥们,我明白你的意思了!

您可以使用:

tesd1Df =test1Df.sqlContext.createDataFrame(test1Df.rdd, test1Df.schema).cache()

上述方式类似于检查点,但不是物理保存数据帧,而是缓存它。

它不会影响你的表现,我也遇到过同样的情况,我观察到了性能的大幅提升。

这种方式我也在 Spark ML 中使用,但问题是你需要注意你的内存空间容量,否则这种方法会起作用。


推荐阅读