Spark優化(九):優化資料結構
優化資料結構
Java中,有三種類型比較耗費記憶體:
-
物件,每個Java物件都有物件頭、引用等額外的資訊,因此比較佔用記憶體空間。
-
字串,每個字串內部都有一個字元陣列以及長度等額外資訊。
-
集合型別,比如HashMap、LinkedList等,因為集合型別內部通常會使用一些內部類來封裝集合元素,比如Map.Entry。
因此Spark官方建議,在Spark編碼實現中,特別是對於運算元函式中的程式碼,儘量不要使用上述三種資料結構,儘量使用字串替代物件,使用原始型別(比如Int、Long)替代字串,使用陣列替代集合型別,這樣儘可能地減少記憶體佔用,從而降低GC頻率,提升效能。
但在實踐中,我們往往會發現,要做到該原則其實並不容易。因為我們同時要考慮到程式碼的可維護性,如果一個程式碼中,完全沒有任何物件抽象,全部是字串拼接的方式,那麼對於後續的程式碼維護和修改,無疑是一場巨大的災難。
同理,如果所有操作都基於陣列實現,而不使用HashMap、LinkedList等集合型別,那麼對於我們的編碼難度以及程式碼可維護性,也是一個極大的挑戰。
所以,可以在可能以及合適的情況下,使用佔用記憶體較少的資料結構,但是前提是要保證程式碼的可維護性。
相關推薦
Spark優化(九):優化資料結構
優化資料結構 Java中,有三種類型比較耗費記憶體: 物件,每個Java物件都有物件頭、引用等額外的資訊,因此比較佔用記憶體空間。 字串,每個字串內部都有一個字元陣列以及長度等額外資訊。 集合型別,比如HashMap、LinkedList等,因為
Machine Learning On Spark——第一節:基礎資料結構(一)
作者:周志湖 微訊號:zhouzhihubyond 本節主要內容 本地向量和矩陣 帶類標籤的特徵向量(Labeled point) 分散式矩陣 1. 本地向量和矩陣 本地向量(Local Vector)儲存在單臺機器上,索引採用0開始的整型表示
mysql優化一:大資料查詢新增索引
一、索引是什麼? 索引是一種特殊的檔案(InnoDB資料表上的索引是表空間的一個組成部分),它們包含著對資料表裡所有記錄的引用指標。 更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度 二、索引目的 索引的目的在於提高查詢效率 三、索引原理 通過不斷的縮小想
【python】入門指南:常用資料結構
Python內建了三種高階資料結構:list,tuple,dict list:陣列,相同型別的元素組成的陣列 tuple:元組,相同型別的元素組成的陣列,但是這裡有限定條件(長度是固定的,並且值也是固定的,不能被改變) dict:字典,k-v結構的 list陣列 1,初始化和遍歷li
第一章:Python資料結構和演算法
第一章:Python資料結構和演算法 Python 提供了大量的內建資料結構,包括列表,集合以及字典。大多數情況下使用這些資料結構是很簡單的。 但是,我們也會經常碰到到諸如查詢,排序和過濾等等這些普遍存在的問題。 因此,這一章的目的就是討論這些比較常見的問題和演算法。 另外,我們也會
python+selenium九:ddt資料驅動 python+selenium九:ddt資料驅動
python+selenium九:ddt資料驅動 讀取excel內容 import xlrdclass ExcelUtil(): def __init__(self, excelPath, sheetName
Cris 複習Python日記(四):Python 資料結構之序列和列表
1. 簡單認識序列和列表 # 序列 # 序列是Python 中最基本的資料結構,用於儲存一組有序的資料,所有資料都在序列中擁有一個唯一索引,並且按照元素新增的順序來指定序列 # 序列的分類 # 1.
資料結構:八大資料結構分類
目錄 1、陣列 2、棧 3、佇列 4、連結串列 5、樹 6、散列表 7、堆 8、圖 @ 資料結構分類 資料結構是指相互之間存在著一種或多種關係的資料元素的集合和該集合中資料元素之間的關係組成 。 常用的資料結構有:陣列,棧,連結串列,佇列,樹,圖,堆,散列表等,如圖所示: 1、陣列 陣列是可以再記憶體
Python 資料結構筆記(1):Python資料結構的效能
本系列部落格是閱讀《Problem Solving with Algorithms and Data Structures using Python》的筆記,原文連結 1、列表 List 索引和賦值是兩個非常常用的操作。這個兩個操作不論列表多長,它們的時間複雜
[介面管理平臺] eoLinker AMS 專業版 V3.5 :加入資料結構管理、通用函式管理、API 快速測試等近 30 項更新
eoLinker AMS是集API文件管理、API自動化測試、開發協作三位一體的綜合API開發管理平臺,是中國最大的線上API管理平臺。目前eoLinker AMS已經為來自全球的超過兩萬家企業託管超過一百萬的API,我們感謝每個曾經以及正在支援我們的企業以及開發者朋友,並對你們致以最誠摯的
[筆記遷移][Spark開發語言][Scala][4]資料結構——Map與Tuple
一、 Map 建立Map(key -> value) (1) 不可變Map(預設伴生物件) (2) 可變Map (3) 另一種建立方式 (4) 空HashMap 獲取指定key
Leetcode開篇:複習資料結構和演算法
背景 讀研的時候從研一開始刷演算法題,Leetcode的程式碼絕大部分都刷完了。後來實習找工作也在繼續刷,但是感覺實習過程中研發崗用到演算法的機會並不是那麼多。所以慢慢的發現這方面能力開始退化了。 畢竟演算法是長遠之計,所以必須得溫故知新,額外之前刷題並沒有很好的做筆記
優秀部落格推薦:各種資料結構與演算法知識入門經典(不斷更新)
作者:C小加 更新時間:2012-8-16歡迎自薦和推薦連結。請於留言處告知。基本演算法貪心演算法:貪心演算法 作者:作者:3522021224遞迴和分治:遞迴與分治策略 作者:zhoudaxia圖論圖的遍歷(DFS和BFS): 圖的遍歷 作者:jefferent最小生成樹(Prim演算法和Kruska
每日一python(9):基礎資料結構 ---- 元組
Tuple是Python內建的另一種資料型別,元組。Tuple也是一種有序的集合,tuple和list非常類似,但是tuple一旦初始化就不能修改。 比如:同樣是列出同學的名字,如下: >>> classmates = ('Bob', 'Tract', 'Jac
每日一python(8):基礎資料結構----列表
List(列表)是Python內建的一種資料型別。List是一種有序的集合,可以隨時新增和刪除其中的元素。 比如,列出班裡所有同學的名字,就可以用一個list表示: >>> classmates = ['Bob', 'tracy', 'Jack', 'Judy'
每日一python(7):基礎資料結構----字串
1、索引 例1: >>> s = "apple" >>> s[0] 'a' >>> s[1] 'p' >>> s[2] 'p' >>> s[3] 'l' >>> s[4]
pandas小記:pandas資料結構和基本操作
pandas的資料 結構:Series、DataFrame、索引物件 pandas基本功能:重新索引,丟棄指定軸上的項,索引、選取和過濾,算術運算和資料對齊,函式應用和對映,排序和排名,帶有重複值的軸索引 Pandas介紹 pandas含有使資料分析工作變得更快更簡單
Spark RDD轉換成其他資料結構
在Spark推薦系統程式設計中,一般都是通過檔案載入成RDD: //在這裡預設 (userId, itemId, preference) val fields = sparkContext.textFile("").split("\t").map{ fie
資料庫系列--資料庫底層索引原理:索引資料結構 B+樹
1、什麼是索引 在關係資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。 索引是
python學習之二:python資料結構和記憶體管理
python資料結構和記憶體管理思維導圖:對於資料結構的學習主要從這幾方面入手:初始化常用操作(增刪該查)常用內建函式,注意點有序序列主要分為字串,列表,和元組,一.有序序列定義:str1=‘python’//字串l1=['python','java','c',100] o