資料格式
flie1:
2012-3-1 a
2012-3-2 b
2012-3-3 c
2012-3-4 d
2012-3-5 a
2012-3-6 b
2012-3-7 c
2012-3-3 c
flie2:
2012-3-1 b
2012-3-2 a
2012-3-3 b
2012-3-4 d
2012-3-5 a
2012-3-6 c
2012-3-7 d
2012-3-3 c
*/
package classiccase
import org.apache.spark.
object case2
}
輸出結果
2012-3-1 a 2012-3-1 b 2012-3-2 a 2012-3-2 b 2012-3-3 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-6 c 2012-3-7 c 2012-3-7 d (2012-3-1 a,1) (2012-3-1 b,1) (2012-3-2 a,1) (2012-3-2 b,1) (2012-3-3 b,1) (2012-3-3 c,1) (2012-3-4 d,1) (2012-3-5 a,1) (2012-3-6 b,1) (2012-3-6 c,1) (2012-3-7 c,1) (2012-3-7 d,1)
(1)當採用reducebykeyt時,spark可以在每個分割槽移動資料之前將待輸出資料與乙個共用的key結合。借助下圖可以理解在reducebykey裡究竟發生了什麼。 注意在資料對被搬移前同一機器上同樣的key是怎樣被組合的(reducebykey中的lamdba函式)。然後lamdba函式在每個區上被再次呼叫來將所有值reduce成乙個最終結果。整個過程如下:
(2)當採用groupbykey時,由於它不接收函式,spark只能先將所有的鍵值對(key-value pair)都移動,這樣的後果是集群節點之間的開銷很大,導致傳輸延時。整個過程如下:
( 3 )區別
reducebykey,在本機suffle後,再傳送乙個總map,傳送到乙個總機器上suffle彙總map,(彙總要壓力小)
groupbykey,傳送本機所有的map,在乙個機器上suffle彙總map(彙總壓力大)
Spark經典案例之資料排序
業務場景 資料排序 1 資料排序 是許多實際任務執行時要完成的第一項工作,比如學生成績評比 資料建立索引等。這個例項和資料去重類似,都是先對原始資料進行初步處理,為進一步的資料操作打好基礎。1 需求描述 對輸入檔案中資料進行排序。輸入檔案中的每行內容均為乙個數字,即乙個資料。要求在輸出中每行有兩個間...
去重與去空案例
去除資料裡面所有na 或者資料單一的列。使用的方法為迴圈,對所有的列進行判斷。columns detail.columns 取出所有的列 drop list for column in columns print column 進行去重,在一列下,資料一樣的進行去重 res detail.drop ...
greendao 查詢之資料去重
最近使用greendao的過程中,有乙個需求 將資料庫的內容根據組別展示。意思就是需要將資料庫中的所有組別取出來,然後根據組別載入資料。之前我的笨辦法是獲取所有的資料,然後對得到的資料手動去重 比較每個實體的組別值是否一致,不是就加到乙個list集合中 笨辦法在數量比較小的資料庫裡面不會有什麼影響,...