最近在使用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