Mở đầu


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:


Dữ liệu


Mình có một dữ liệu như sau


name,age,money(k$)

A,20,2
B,22,3
C,20,1
D,19,5
E,19,9

Và mình muốn đầu ra như sau:


age,avg(money)

19,7
20,1.5
22,3

 


Ý tưởng


Đầu tiên vẫn là map nó lại :smile: dưới dạng tuple (age, money), sau đó tính số người cùng độ tuổi và số tiền họ có được và trả về 1 list bao gồm các tuple dạng (age, sum(money), total)


 


Code


Đầu tiên map lại


group = rdd.map(lambda x: (x[1],(x[2],1)))


Sau đó Reduce theo ý muốn


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


Map thêm lần nữa (để tính avg)


group = group.map(lambda (x,y): (x,round(float(y[0]) / y[1],2))).sortByKey()


Vào terminal gõ:


spark-submit avg.py


 


Kết quả


(19, 7.0)
(20, 1.5)
(22, 3.0)


Ai ngoại đạo đừng rủa mình hay kêu mình đang "lảm nhảm" nhé :smile:
Happy coding :smile: