model.save(sc,'fname')異常Exception in thread "dag-scheduler-event-loop" java.lang.StackOverflowError

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章