spark RDD textFile運算元 分割槽數量詳解
進入textFile原碼
發現 分割槽數量呼叫 hadoopFile中的TextInputFormat類,傳入引數Key為LongWritable即偏移量,value為Text,
由此得知是通過這個類來讀取
繼續進入TextInputFormat類中
發現有個是否可以切分的判斷,可以知道 一些不可拆分的檔案由此過濾掉,可以切片拆分的檔案繼續往下尋找卻沒有相關處理邏輯 ,所以我們向上去到父類FileInputFormat中
找到如上邏輯,呼叫了listStatu與namenode互動獲取檔案屬性,把要讀取的檔案總長度計算出來 totalSize
下面找到一個關鍵變數goalSize他的值為所有檔案總長度除以預設最小分割槽數,
中間過程不一一贅述,關鍵程式碼在computeSplitSize
進入computeSplitSize中
三個引數值 goalSize上述計算過,minSize預設為1,blockSize為HDFS預設塊大小 128M
computeSplitSize主處理很簡單,先比較goalSize和blockSize大小取兩者最小的,再與minSize比較取兩者最大的 最終結果賦給splitSize
之後回到先前邏輯, 定義一個bytesRemaining接收每個檔案的長度,進入while迴圈 條件為
檔案長度/splitSize >1.1即SPLIT_SLOP便執行切分操作 直到條件不滿足 停止迴圈切分
舉例說明:
4個檔案長度分別為100 100 100 1400位元組,預設最小分割槽為2
首先計算全部檔案總長度totalSize=100+100+100+1400=1700
goalSize=totalSize/最小分割槽數即2 =850
blockSize=128M換算成位元組為134217728
minSize=1
goalSize與blockSize取最小 值為850
850 與minSize取最大 值為850
即splitSize為850
然後 每個檔案長度除以850 判斷是否大於1.1
檔案1,2,3都是100所以各生成1個分割槽,
檔案4位1400,除以850>1.1 切分一個分割槽,剩餘
(1400-850)/850 >1.1不再成立 又生成一個分割槽.
所以舉例中的四個檔案 共生成5個分割槽
相關文章
- Spark運算元:統計RDD分割槽中的元素及數量Spark
- spark-運算元-分割槽運算元Spark
- Spark RDD的預設分割槽數:(spark 2.1.0)Spark
- Spark RDD運算元(八)mapPartitions, mapPartitionsWithIndexSparkAPPIndex
- Spark----RDD運算元分類 DAGSpark
- RDD運算元
- 深入原始碼理解Spark RDD的資料分割槽原理原始碼Spark
- spark RDD運算元(五)之鍵值對聚合操作combineByKeySpark
- Spark學習——分割槽Partition數Spark
- Spark RDD詳解 | RDD特性、lineage、快取、checkpoint、依賴關係Spark快取
- 【Spark篇】---SparkStreaming中運算元中OutPutOperator類運算元Spark
- Spark操作Hive分割槽表SparkHive
- Hive和Spark分割槽策略HiveSpark
- Spark常用Transformations運算元(一)SparkORM
- Hive動態分割槽詳解Hive
- Spark效能調優-RDD運算元調優篇(深度好文,面試常問,建議收藏)Spark面試
- 圖解Spark排序運算元sortBy的核心原始碼圖解Spark排序原始碼
- spark一些常用運算元Spark
- spark:自定義分割槽,自定義排序,spark與jdbc,廣播變數等Spark排序JDBC變數
- spark-RDDSpark
- Spark RDD APISparkAPI
- Apache Spark:分割槽和分桶 - NiveditaApacheSpark
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- 【INDEX】Oracle分割槽索引技術詳解IndexOracle索引
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 大白話講解Spark中的RDDSpark
- Spark獲取當前分割槽的partitionIdSpark
- Spark - [03] RDD概述Spark
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- 好程式設計師大資料基礎教程分享TextFile分割槽問題程式設計師大資料
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- spark的基本運算元使用和原始碼解析Spark原始碼
- 聊聊Spark的分割槽、並行度 —— 前奏篇Spark並行
- win10系統下如何分整數分割槽_windows10怎樣計算硬碟分割槽整數Win10Windows硬碟