Spark迭代算法UDF在每次迭代中被多次触发



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

我得到了你的分数,伙计!

您可以使用:

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

上面的方法类似于检查点,但不是物理地保存数据帧,而是缓存它

这不会影响你的表现,我也遇到过同样的情况,我观察到你的表现有了很大的改善。

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

最新更新