最近在使用pyspark保存model的时候出现Exception in thread "dag-scheduler-event-loop" java.lang.StackOverflowError报错,
网上搜索了一下找下如下解决方案,有效。
解决方法:
操作步骤一
1.连接上提交spark-submit的服务器,输入下面命令,可以看看默认的栈大小,我的是1M
java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
2.找到spark的配置文件,每个人的环境不一样,这里就不贴路径了,编辑之
sudo gedit /usr/local/spark/conf/spark-defaults.conf
3.在最后面加上如下配置,大小可根据实际情况指定,大点无所谓,小了要报错。
spark.driver.extraJavaOptions=-Xss30M
重启spark是配置生效
注意:如果无法修改spark集群的参数,可以在spark-submit提交任务时增加参数--conf "spark.driver.extraJavaOptions=-Xss30M"
操作步骤二:
主程序if __name__ == "__main__": 加入
sc.setCheckpointDir('checkpoint')
样例如下:
if __name__ == "__main__":
sc=CreatSparkContext()
sc.setCheckpointDir('checkpoint')
print("=========数据准备阶段===========")
ratingsRDD = PrepareData(sc)
print("===========训练阶段============")
print("开始ALS训练,参数 rank=5,interations=20, lambda=0.1");
model = ALS.train(ratingsRDD, 5, 20, 0.1)
print("==========存储 Model==========")
SaveModel(sc)
参考:https://blog.csdn.net/weixin_38504735/article/details/103281299