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...