大家都只知道srotbykey是乙個transformation運算元,而transformation型別的運算元是不觸發job的,但是有心的人會注意到,在我們呼叫sortbykey這個運算元時 ,可以從ui介面看到,sortbykey竟然會觸發job
其實sortbykey 在執行時會對分割槽中的資料進行取樣,把取樣的資料再進行收集(collect),那麼此時就會觸發乙個job,具體的原因可以往下看原始碼
以下是原始碼分析
如果又**寫錯了歡迎糾正
參考文章
可以先大概的跟一邊**
(1)呼叫sortbykey時,會new乙個rangepartitioner類
(2)點進rangepartitioner中,會初始化乙個rangebounds的陣列
再裡面呼叫了sketch方法(在類中,在方法外,相當於是構造方法中的)
(3)點進sketch方法中,這裡呼叫了乙個collect方法,點進這個collect方法中,可以發現是rdd的方法,會呼叫runjob
上面是大概看了一遍,有興趣的可以再向下看原始碼的分析
def sortbykey
(ascending: boolean =
true
, numpartitions: int = self.partitions.length)
:rdd[(
k,v)
]= self.withscope
這裡直接取了一部分**,是在new rangepartitioner 初始化時會執行的
class
rangepartitioner[k
: ordering : classtag,v]
( partitions: int,
rdd:
rdd[_ <
: product2[k,
v]],
private
var ascending: boolean =
true
)extends
partitioner
else
else
else}}
if(imbalancedpartitions.nonempty)
rangepartitioner.
determinebounds
(candidates, partitions)
}}
sketch方法:
def sketch[
k: classtag]
( rdd:
rdd[k]
, samplesizeperpartition: int)
:(long, array[
(int, long, array[k]
)])=
.collect()
//先收集每個分割槽的樣本的,collect方法會產生乙個job ,這裡是把取到的樣本後得到的rdd進行收集,點進collect方法會發現有乙個runjob
val numitems = sketched.
map(_._2)
.sum // 這個numitems應該是總共的樣本數
(numitems, sketched)
//最後把樣本數,乙個收集好的樣本array[key]型別返回
}
激勵為什麼會失效
摘要 不是注重用外部的力量來激勵員工,而是要用認可和獎勵點燃員工的心中之火。點評 著名的調查公司sirota survey intelligence的一項大型調查表明,大約85 的公司的員工,在入職的時候都是情緒高漲,但是在工作6個月之後,熱情會急劇下降,並在以後的工作中會持續下降。也許正因為這個現...
員工為什麼會離職
網上摘抄的,說得很確切,有參考學習價值,馬雲說 員工的離職原因,只有兩點最真實 1 錢,沒給到位。2 心,委屈了。這些歸根到底就一條 幹得不爽。員工臨走還費盡心思找靠譜的理由,就是為給你留面子,不想說穿你的管理有多爛 他對你已失望透頂。仔細想想,真是人性本善。作為管理者,定要樂於反省。帶團隊,你得問...
員工為什麼會離職?
網上摘抄的,說得很確切,有參考學習價值,馬雲說 員工的離職原因,只有兩點最真實 1 錢,沒給到位。2 心,委屈了。這些歸根到底就一條 幹得不爽。員工臨走還費盡心思找靠譜的理由,就是為給你留面子,不想說穿你的管理有多爛 他對你已失望透頂。仔細想想,真是人性本善。作為管理者,定要樂於反省。帶團隊,你得問...