亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

派斯帕克。內存不足問題。如何確保表被覆蓋

派斯帕克。內存不足問題。如何確保表被覆蓋

喵喔喔 2021-09-11 17:40:55
我目前嘗試了解 Spark 計算的過程以及對內存消耗的影響。我正在 Zeppelin 中使用 Spark 2.3.2 和 Python 2.7?;旧显谙旅娴难h中,我正在創建集合。我正在使用 sci-kit-learn 構建機器學習模型,并且在 sci-kit-learn 計算之后我正在對 pyspark-dataframes 進行大量數據幀操作。對于每個 i 我得到一個表 rsmeMaeStep,其中有 8 行和 10 列,帶有小字符串或雙精度值。rsmeMaeAll 只是將單個分析加在一起,并且有 8*26 =208 行和 10 列 i=26。for i in range(26):    df_features_train, df_features_validation = randomizer(dataFiltered)    rsmeMaeStep, rsmeMaeAll = rsmeMaeAnalysis(rsmeMaeAll,df_features_train,df_features_test)    print(i)我對代碼做了一些時間分析。對于 i=1,i=10 需要 17 秒:對于 i =26,需要 2:40 分鐘,需要 6:42。(即 10 或 26 個循環的 9.4 或 23.6 倍長。)到目前為止,一切都符合預期。我在下一步中遇到問題。下面的代碼應該只是對 8 到 206 行的簡單聚合。對于 i=1 需要 32 秒,對于 i=7 4:43(長 8.8 倍)但是對于 i=26 我在 47 分鐘后有 0% 或者它失敗并顯示內存不足消息。rsmeMae = rsmeMaeAll.select('set','setting','sme').orderBy('set','setting')import pyspark.sql.functions as frsmeMaeAverage = rsmeMae.groupBy('setting','set').agg(f.count(('setting')).alias('nrOfRand'), f.round(f.mean('sme'),2).alias('rsme'),f.round(f.stddev('sme'),2).alias('sigmaRsme')).orderBy('set','setting')z.show(rsmeMaeAverage)基于我認為所有表都應該在每個循環中被覆蓋的邏輯。每個循環中,只有小的 rsmeMaeAll 應該增加一點。但它仍然是一張很小的桌子。但 Spark 的行為可能有所不同。據我了解情況,第一步的sk-learn代碼是在第一步中執行的。如果我確實正確理解了 spark 延遲評估,那么當我想打印結果時,我的代碼中的 pySpark 操作就會開始執行。因此,Spark 可能會將所有循環的所有表都保存在內存中。那正確嗎?如果我是對的,我將需要在每個循環結束時直接計算 pySpark 代碼的代碼。我該怎么做?如果我這樣做會在下一個循環中觸發覆蓋表,還是每次循環都會增加內存消耗?我是否需要從內存中主動刪除表以及如何刪除?編輯:我剛剛整合rsmeMaeStep.collect()rsmeMaeAll.collect()進入循環以確保 pyspark 計算立即完成。但是第一個循環用了 55 秒。第 7 個循環用了 10 多分鐘,49 分鐘后它在第 8 個循環的 rsmeMaeAll.collect() 處崩潰。隨著錯誤消息:Py4JJavaError:調用 o13488.collectToPython 時出錯。:java.lang.OutOfMemoryError: Java 堆空間我真的不明白每個循環時間的指數增長。在我至少能夠運行 10 個循環之前。那里發生了什么?
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號