我有一個關于在計算后寫入結果的問題。我知道每個執行程式在其磁區上完成作業后,都會將其結果寫回 HDFS/本地檔案系統(基于使用的集群管理器)。
這是有道理的,因為如果您不需要任何結果聚合,則實際上不需要等待所有執行程式完成并將結果寫回。
但是,當資料需要按升序或降序在特定列(例如 ID)上排序時,寫操作如何作業?
在計算開始之前,spark 的邏輯計劃會首先根據每個執行程式的 ID 對磁區進行排序嗎?在這種情況下,任何執行器都可以先完成并開始將其結果寫入 HDFS,那么整個框架如何確保最終結果已排序?
提前致謝
uj5u.com熱心網友回復:
從我從這個答案中了解到:https : //stackoverflow.com/a/32888236/1206998排序是一個將所有資料集專案洗牌到“排序”磁區的程序,其中邊界(邊界上的專案)是一些百分位專案在資料集的樣本上:
如果我們有資料集[1,5,6,8, 10, 20, 100](以任何順序)并將其分為 3 個磁區,我們得到:
- 磁區 1 =
[1,5,6] (sorted within partition) - 磁區 2 =
[8,10] ( " ) - 磁區 3 =
[20,100] ( " )
因此,任何后續操作都可以獨立地在每個磁區上完成,包括寫入。
請記住:
- spark 管理記憶體中的資料,并根據配置,在本地寫入磁區資料。
- 寫入是按磁區完成的,但輸出檔案(在像 hdfs 這樣的分布式 FS 中)是隱藏的,直到所有資料都完成。好吧,至少對于鑲木地板作家來說,不確定其他作家。
- 正如您所料,排序是一項昂貴的操作
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360755.html
