Spark數據結構優化

       要減少內存的消耗,除了使用高效的序列化庫以外,還有一個很重要的事情,就是優化數據結構。從而避免Java語法特性中所導致的額外內存的開銷,比如基於Java數據結構,以及包裝類型。

       1、優先使用數組以及字符串,而不是集合類。也就是說,優先用array,而不是ArrayList,LinkedList,HashMap等集合。比如,有個List<Integer> list = new ArrayList<Integer>(),將其替換爲int[] arr = new int[]。這樣的話,array比list少了額外信息的存儲開銷,還能使用原始數據類型(int)來存儲數據,比integer這種包裝類型存儲數據,要節省內存的多。

       2、避免使用多層嵌套的對象結構。比如說,public class Teacher{private List<Student> students = new ArrayList<Student>()}。這個就是非常不好的例子,因爲Teacher內部又嵌套了大量的小Student對象。對於這種情況可以選擇特殊的數據結構來進行存儲,比如用多層嵌套的JSON字符串就是一個很好的選擇。

       3、儘量使用int替代String。因爲string雖然比list,map等數據結構高效多了,佔用內存少,但是他相比int類型還是有額外信息的消耗,比如char數組信息。程序中常用的id,完全可以用string來描述。在spark應用中,id就不要用常用的uuid了,因爲無法轉成int,就用自增的int類型的id即可。

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