spark執行中的java.lang.OutOfMemoryError: Java heap space錯誤
阿新 • • 發佈:2019-01-04
問題描述:
我在執行我的spark程式碼過程中,出現瞭如標題所示的問題
以下為我執行的主要程式碼:
ss=e_Task_test.engine()
diag_hos=l_patient.map(lambda x:(ss.get_hospital(x),ss.get_patient_diag(x)))
dh_all=diag_hos.groupByKey().map(lambda x:(x[0],list(x[1]))).collect()
我程式碼的目的:是要統計在同一個醫院裡所有的診斷資訊的數目,因此我先形成 醫院-診斷資訊 的key-value資料,然後再通過key值聚合,然後求出value值的長度,最後得到同一個醫院對應的診斷資訊的數量
最後我的改進辦法為:通過mapvalues和reduceby兩個方法,直接進行計數,最後得到最後的結果:
diag_hos=l_patient.map(lambda x:(ss.get_hospital(x),ss.is_patient_diag(x)))
dh_all=diag_hos.mapValues(lambda x:(x,1)).reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1]))對value值又增加了一個1,最後得到的x[1]中內容即為最後同一醫院診斷資訊的數量
當然還有另外一種統計的方法:那就是map時候,形成的key-value為 醫院-1 這樣的值,最後根據醫院,做一個reducebykey(lambda x,y:x+y) 最後聚合之後得到的內容即為 同一醫院診斷資訊的數量
歡迎和大家一起交流spark相關的學習心得~