我正在尝试运行Spark的Power Iteration Clustering算法,对8000万行数据进行5000次迭代。在低迭代(几百)时,它完成得很好,因此它不是代码问题。在高迭代时,它给我一个java.lang.StackOverflowError异常。
我知道这意味着DAG变得太大而无法跟踪谱系等。我还读过,检查点可以在迭代算法中解决这个问题。问题是PIC没有像LDA算法那样的检查点间隔参数,因此我无法(或者至少不知道如何)在算法运行过程中检查点。
这个问题还有其他可能的解决办法吗?我也试图增加堆栈内存但是没有用。我不能减少迭代,因为它不会收敛。