Spark專家的一個很好的問題。Spark執行程序上的對象緩存
我正在處理map
操作(RDD)中的數據。在映射函數中,我需要查找A
類的對象以用於處理RDD中的元素。
由於這將在執行器上執行,並且創建類型爲A
(將被查找)的元素恰好是一個昂貴的操作,我想要在每個執行器上預加載和緩存這些對象。做這件事的最好方法是什麼?
一個想法是廣播查找表,但類
A
是不可序列(在其沒有實施控制)。另一個想法是將它們加載到單例對象中。但是,我想控制裝入該查找表的內容(例如,不同的Spark作業中可能有不同的數據)。
理想情況下,我需要指定哪些將在執行人一次裝入(包括流的情況下,使查找錶停留在批次之間的內存),通過將可在駕駛過程中的參數它的啓動,在任何數據被處理之前。
是否有乾淨優雅的做法,或者它不可能實現?
爲什麼沒有查找表也分佈?所以你可以使用DataFrames來連接兩組數據?如果總是需要查找數據,那麼每次需要運行計算時都需要承受廣播數據的費用? – DevZer0
@ DevZer0 _A不是serializable_。 – 2016-11-05 14:07:25