Tôi muốn nhóm theo giá trị và sau đó tìm giá trị tối đa trong mỗi nhóm bằng PySpark. Tôi có mã sau đây nhưng bây giờ tôi đang bit bị mắc kẹt về cách trích xuất giá trị tối đa.pyspark: grouby và sau đó nhận giá trị tối đa của mỗi nhóm
# some file contains tuples ('user', 'item', 'occurrences')
data_file = sc.textData('file:///some_file.txt')
# Create the triplet so I index stuff
data_file = data_file.map(lambda l: l.split()).map(lambda l: (l[0], l[1], float(l[2])))
# Group by the user i.e. r[0]
grouped = data_file.groupBy(lambda r: r[0])
# Here is where I am stuck
group_list = grouped.map(lambda x: (list(x[1]))) #?
Returns cái gì đó như:
[[(u'u1', u's1', 20), (u'u1', u's2', 5)], [(u'u2', u's3', 5), (u'u2', u's2', 10)]]
Tôi muốn tìm max 'xảy ra' cho mỗi người dùng bây giờ. Kết quả cuối cùng sau khi thực hiện tối đa sẽ dẫn đến RDD giống như sau:
[[(u'u1', u's1', 20)], [(u'u2', u's2', 10)]]
Nơi chỉ có tập dữ liệu tối đa sẽ còn lại cho mỗi người dùng trong tệp. Nói cách khác, tôi muốn thay đổi giá trị của RDD để chỉ chứa một bộ ba đơn lẻ cho mỗi lần xuất hiện tối đa của mỗi người dùng.
bạn có thể giải thích điều này '(lambda x1, x2: max (x1, x2, key = lambda x: x [-1])) 'nếu có thể? – WoodChopper
@WoodChopper 'max' chỉ là một tiêu chuẩn Python' max'. Nó lấy các phần tử và trả về phần tử lớn nhất. Đối số 'khóa' mô tả cách so sánh các phần tử (ở đây là mục cuối cùng). – zero323