01/10/2018, 17:30
Cách hoạt động mapValues() trên Spark RDD
em đang học lập trình spark, có nhiều chỗ em không hiểu mong mọi người giải thích giúp ạ.
def sort_friends(itr):
result = []
for friend in itr:
result.append(friend)
result.sort(compare_friends)
result = result[:10]
return result
def compare_friends(f1, f2):
result = f2[1] - f1[1]
if result == 0:
result = f1[0] - f2[0]
return result
counts dữ liệu có dạng như thế này:
(0, [(3926, 1), (12570, 2), (3574, 1), (27736, 1)])
(1, [(89, 1), (57, 1), (41457, 1), (5, 2), (77, 1), (63, 1), (27, 1)])
(2, [(64, 1), (36, 1), (8, 1), (94, 1), (34, 1), (6, 1), (12, 1), (92, 1)])
em trích tạm , vì nó nhiều ạ
rec = counts.mapValues(lambda v: sort_friends(v))
kết quả của rec là sắp xếp các cái list trong mỗi tuple theo giá trị 1,2… là số thứ 2 của mỗi cái tuple trong list.
Bài liên quan
counts
của bạn là PairRDD.Bình thường
map
chỉ thao tác trên từng element trong RDD. Tuy nhiên, PairRDD có 2 giá trị key và value nên cómap
tương ứng cho value làmapValues
Bạn truyền
sort_friends
là argumentmapValues()
thì nó sắp xếp trên value của PairRDDcounts
thôi.Riêng
sort_friends
, mình thấy thừa ở chỗsort
trongfor
, thử code này chạy không.Mình dùng Spark trên Scala, chưa thử Python bao giờ.
result = itr[:]
lệnh này là sao ạ.Copy lại giá trị của một list.
Có vẻ như bạn phải học kĩ về list trong Python rồi.
vâng ạ, em cám ơn a.