2015-10-13 65 views
0

你能幫我解決我遇到的問題嗎?我正在處理100Go文件。我試圖運行下面的代碼:Spark Python reduceByKey性能低下

testUP_TIME = (linesSampleMarch 
      .filter(lambda x : x[0][0:10]=="2015-03-21") 
      .map(lambda s : ((s[1], s[2]),1)) 
      .reduceByKey(lambda x, y : x+y)) 
      .groupByKey() 
      .cache()) 

後很長一段時間(約30秒),它最終結束時出現錯誤:「同時呼籲ž發生錯誤:org.apache.spark.api.python .PythonRDD.runJob。 :org.apache.spark.SparkException:由於階段失敗導致作業中止:階段5.0中的任務1失敗4次,最近失敗:階段5.0中丟失的任務1.4(TID 654,192.168.161.52): ExecutorLostFailure(executor 9 lost)「

我發現reduceByKey()對它負責。你有什麼建議來優化這個查詢嗎?我想增加父RDD的分區數量,但我不知道我是否正確。謝謝你的幫助 !

回答

0

你能否提供一個你正在使用的數據的例子,並解釋你想要做什麼?

我不確定我明白你爲什麼需要在reduceByKey動作後執行groupByKey。

但是總的來說,你得到的錯誤可能是執行者內存不足的一個指標。 Python使用一些額外的內存,火花無法解釋。

解決這個問題的方法是放大spark.yarn.executor.memoryOverhead

我使用spark.yarn.executor.memoryOverhead大小與executor-memory相近。

+0

對不起,我的代碼有一個錯誤,我只有reduceByKey。我終於設法通過將reduceBeyKey中的分區從8(默認)增加到32來讓我的代碼在我的數據上運行。無論如何感謝您的回答! –