spark算子實戰(二)

spark算子實戰中介紹了Value型Transformation算子,這裏將繼續介紹Key-Value型Transformation算子,Actions算子將在spark算子實戰(三)中介紹。

Key-Value型的Transformation算子

算子 說明
mapValues 針對[K,V]型的V值進行map操作。
combineByKey 使用用戶設置好的聚合函數對每個Key中的Value進行組合(combine),可以將輸入類型RDD[(K,V)]轉成RDD[(K,C)]。
reduceByKey 對元素爲KV對的RDD中Key相同的元素的Value進行binary_function的reduce操作,因此,Key相同的多個元素的值被reduce爲一個值,然後與原RDD中的Key組成一個新的KV對。
cogroup 將元素爲KV對的兩個RDD中Key相同的元素聚合成一個集合。
join 對兩個RDD進行內連接操作。
leftOuterJoin 對兩個RDD進行連接操作,左外連接。
rightOuterJoin 對兩個RDD進行連接操作,右外連接。

1.mapValues

實例1
scala代碼

val a = sc.parallelize(List(("a", List("apple", "banana", "lemon")), ("b", List("grapes"))))
a.mapValues(x => x.length).collect

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([("a", ["apple", "banana", "lemon"]), ("b", ["grapes"])])
a.mapValues(lambda x:len(x)).collect()

結果:
這裏寫圖片描述

實例2
scala代碼

val a = sc.parallelize(List((1,"tom"), (2,"lucy"), (3,"alex"), (4,"july"), (5,"alina"), (6,"andy")), 2)
a.mapValues("hello,"+_).collect

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([(1,"tom"), (2,"lucy"), (3,"alex"), (4,"july"), (5,"alina"), (6,"andy")], 2)
a.mapValues(lambda x:"hello,"+x).collect()

結果:
這裏寫圖片描述

2.combineByKey

實例1
scala代碼

val a = sc.parallelize(List("tom", "lucy", "alex", "july", "alina", "andy"), 2)
val b = sc.parallelize(List(1,1,2,2,1,2))
val c = b.zip(a)
//::(兩個冒號)表示普通元素與List的連接操作,:::(三個冒號)表示List的連接操作
val d = c.combineByKey(List(_),(x:List[String],y:String)=> y::x,(x:List[String],y:List[String])=>x:::y)

d.collect

結果:
這裏寫圖片描述

python代碼

def to_list(x):
    return [x]
def append(x,y):
    x.append(y)
    return x
def extend(x,y):
    x.extend(y)
    return x

a = sc.parallelize(["tom", "lucy", "alex", "july", "alina", "andy"], 2)
b = sc.parallelize([1,1,2,2,1,2])
c = b.zip(a)
c.combineByKey(to_list,append,extend).collect()

結果:
這裏寫圖片描述

3.reduceByKey

實例1
scala代碼

val a = sc.parallelize(List(("a", 1), ("b", 1), ("a", 1)))
a.reduceByKey(_+_).collect.sorted

結果:

這裏寫圖片描述

python代碼

from operator import add
a = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
sorted(a.reduceByKey(add).collect())

結果:
這裏寫圖片描述
實例2
scala代碼

val a = sc.parallelize(List("tom", "lucy", "alex", "july", "alina", "andy"), 2)
val b = a.map(x => (x.length,x))
b.reduceByKey(_+' '+_).collect

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize(["tom", "lucy", "alex", "july", "alina", "andy"], 2)
b = a.map(lambda x:(len(x),x))
b.reduceByKey(lambda x,y:x+' '+y).collect()

結果:
這裏寫圖片描述

4.cogroup

實例1
scala代碼

val a = sc.parallelize(List(1,2,3),1)
val b = a.map((_,"b"))
val c = a.map((_,"c"))
b.cogroup(c).collect.sorted

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([1,1,2,3],1)
b = a.map(lambda x:(x,"b"))
c = a.map(lambda x:(x,"c"))
[(x,tuple(map(list,y)))for x,y in sorted(b.cogroup(c).collect())]

結果:
這裏寫圖片描述

5.join

實例1
scala代碼

val a = sc.parallelize(List(("a", 1), ("b", 4)))
val b = sc.parallelize(List(("a", 2), ("a", 3)))
a.join(b).collect.sorted

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([("a", 1), ("b", 4)])
b = sc.parallelize([("a", 2), ("a", 3)])
sorted(a.join(b).collect())

結果:
這裏寫圖片描述

6.leftOuterJoin

實例1
scala代碼

val a = sc.parallelize(List(("a", 1), ("b", 4)))
val b = sc.parallelize(List(("a", 2)))
a.leftOuterJoin(b).collect.sorted

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([("a", 1), ("b", 4)])
b = sc.parallelize([("a", 2)])
sorted(a.leftOuterJoin(b).collect())

結果:
這裏寫圖片描述

7.rightOuterJoin

實例1
scala代碼

val a = sc.parallelize(List(("a", 1), ("b", 4)))
val b = sc.parallelize(List(("a", 2)))
a.rightOuterJoin(b).collect.sorted

結果:
這裏寫圖片描述

python代碼

a = sc.parallelize([("a", 1), ("b", 4)])
b = sc.parallelize([("a", 2)])
sorted(a.rightOuterJoin(b).collect())

結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章