Spark讀取hdfs分片資料原始碼剖析

2021-10-05 23:56:41 字數 1002 閱讀 4662

val lines: rdd[string] = sparkcontext.textfile(args(0)) 我們通過 sparkcontext.textfile來讀取hdfs中某一資料

正常來說,應該是有幾個檔案就建立幾個分割槽

然而我們dubug的時候發現,有時候3個檔案卻建立了4個分割槽

其實這是由於spark中對於hdfs分片資料拉取的原始碼

首先 我們在用testfile時,若不指定分割槽數量,則預設使用最小值=2

long goalsize = totalsize / (long)(numsplits == 0 ? 1 : numsplits);

spark中用了goalsize這個屬性,來定義乙個理想的大小,totalsize為傳入資料總大小,numsplits為分割槽數.

8.

long splitsize =

this

.computesplitsize

(goalsize, minsize, blocksize);.

9.protected

long

computesplitsize

(long goalsize,

long minsize,

long blocksize)

呼叫computesplitsize算出splitsize

for

(bytesremaining = length;

(double

)bytesremaining /

(double

)splitsize >

1.1d

; bytesremaining -= splitsize)

再通過計算當前檔案的大小是否大於splitsize1.1倍,來確實是否需要把當前檔案拆分

所以在這裡就有可能會把檔案拆分到多個分割槽中

spark 讀取 hdfs 資料分割槽規則

下文以讀取 parquet 檔案 parquet hive table 為例 hive metastore 和 parquet 轉化的方式通過 spark.sql.hive.convertmetastoreparquet 控制,預設為 true。如果設定為 true 會使用 org.apache.s...

spark 讀取 hdfs 資料分割槽規則

下文以讀取 parquet 檔案 parquet hive table 為例 hive metastore 和 parquet 轉化的方式通過 spark.sql.hive.convertmetastoreparquet 控制,預設為 true。如果設定為 true 會使用 org.apache.s...

python讀取hdfs資料

載入包from hdfs.client import client self.filename user hdfs read.txt 讀取hdfs檔案內容,將每行存入陣列返回def read hdfs file self with client.read samples.csv encoding u...