11/08/2018, 21:05

Map - Reduce Multiple Key - Value

Mình đang nghiên cứu Spark, nên có những thứ với mình khá là mới mẻ, nên log lại đôi chút để sau này còn có cái để training hay đọc lại À còn nữa, bài viết chỉ dành cho những ai đã và đang nghiên cứu về Spark. Người không nghiên cứu có khi đọc không hiểu đâu Ví dụ mình có một dữ liệu được ...

Mình đang nghiên cứu Spark, nên có những thứ với mình khá là mới mẻ, nên log lại đôi chút để sau này còn có cái để training hay đọc lại :smile:
À còn nữa, bài viết chỉ dành cho những ai đã và đang nghiên cứu về Spark. Người không nghiên cứu có khi đọc không hiểu đâu :smile:

Ví dụ mình có một dữ liệu được lưu dưới file text có 3 cột 5 dòng

a1,a2,a3
b1,b2,b3
a1,c2,c3
b1,d2,d3
c1,e2,e3

Mình muốn map nó lại như sau

a1, a2 + c2, a3 + c3
b1, b2 + d2, b3 + d3
c1, e2, e3

Ý tưởng như sau, đầu tiên mình sẽ map nó thành dạng key-value để xử lí trong Spark
Sau đó mình sẽ reduce nó để cộng các value lại với nhau, cuối cùng là sort và collect

P/s: ở đây mình dùng python nhé
Đầu tiên là map lại

groupValue = rdd.map(lambda x: (x[0],(x[1], x[2]))) # rdd is RDD Object

Sau đó là reduce nó phát

reduceValue = groupValue.reduceByKey(lambda x,y: (x[0] + y[0], x[1] + y[1]))

Sort và collect nào

sort = reduceValue.map(lambda (x,y): (y,x)).sortByKey(0).collect() #param trong sortByKey nếu 0 (false) là DESC còn 1 (true) là ASC

Xong rồi :smile:

Dân ngoại đạo đọc vô chắc lẩm bẩm "Bố thằng điên, đang nói cái quái gì thế này :smile:"
Happy coding...

0