天天看點

颠覆大資料分析之RDD的表達性

颠覆大資料分析之RDD的表達性

map-reduce:如果存在混合器的話,這個可以使用rdd上的flatmap和reducebykey操作來表示。簡單點的話可以表示成flatmap和groupbykey操作。運算符則對應于spark中的轉換操作。

dryadlinq:dryadlinq(yu等2008)通過結合了聲明性及指令式程式設計提供了mr所沒有的操作。大多數操作符都能對應上spark中的轉換操作。dryad中的apply結構就類似于rdd的map轉換,而fork結構則類似于flatmap轉換。

整體同步并行(bsp):pregel (malewicz等 2010)中的計算由一系列稱為超步驟的疊代所組成。圖中的每個頂點都關聯上一個使用者定義的計算函數;pregel會確定在每一個超步驟中,使用者定義的函數都會并行地在每一條邊上執行。頂點可以通過邊來發送消息并與其它的頂點互動資料。同樣的,還會有一個全局的栅欄——當所有的計算函數都終止的時候它就會向前移動。熟悉bsp的讀者可能會知道,pregel是一個完美的bsp的典範——一組實體在并行地計算使用者定義的函數,它們有全局的同步器并可以交換消息。由于同一個使用者函數會作用于所有的頂點,這種情況可以這樣實作,将所有頂點存儲在一個rdd中并在上面運作flatmap操作來生成一個新的rdd。把它和跟頂點的rdd連接配接到一塊,這樣就可以實作消息傳遞了。

疊代式map-reduce:haloop項目也同樣擴充了hadoop來支援疊代式機器學習算法。haloop不僅為疊代式應用提供了程式設計抽象,同時它還用到了緩存的概念來在疊代間進行資料共享和固定點校驗(疊代的終止)以便提升效率。twister (ekanayake等2010)是另一個類似haloop的嘗試。這些在spark中都可以很容易實作,因為它本身非常容易進行疊代式計算。amplabs團隊實作haloop僅花了200行代碼。

繼續閱讀