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
         
                
            




countscủa bạn là PairRDD.Bình thường
mapchỉ thao tác trên từng element trong RDD. Tuy nhiên, PairRDD có 2 giá trị key và value nên cómaptương ứng cho value làmapValuesBạn truyền
sort_friendslà argumentmapValues()thì nó sắp xếp trên value của PairRDDcountsthôi.Riêng
sort_friends, mình thấy thừa ở chỗsorttrongfor, 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.