Допустим, у нас есть элемент, содержащий rdd, каждый из которых выглядит следующим образом:
(studentName, course, grade):
("Joseph", "Maths", 83), ("Joseph", "Physics", 74), ("Joseph", "Chemistry", 91), ("Joseph", "Biology", 82),
("Jimmy", "Maths", 69), ("Jimmy", "Physics", 62), ("Jimmy", "Chemistry", 97), ("Jimmy", "Biology", 80),
("Tina", "Maths", 78), ("Tina", "Physics", 73), ("Tina", "Chemistry", 68)
Моя цель состоит в том, чтобы получить еще один rdd, состоящий из (StudentName, [(course, grade)])
, используя aggregateBykey
:
("Joseph", [("Maths", 83),("Physics", 74), ("Chemistry", 91), ("Biology", 82)])
("Jimmy", [("Maths", 69), ("Physics", 62), ("Chemistry", 97), ("Biology", 80)])
("Tina", [("Maths", 78), ("Physics", 73), ("Chemistry", 68)])
Я попробовал следующее:
zero_val = []
student_list_rdd = studentRDD(lambda u: (u[0], (u[1], u[2]))).aggregateByKey(zero_val, seq_op, comb_op)
def seq_op(accumulator, element):
if element not in accumulator:
return element
return accumulator
# Combiner Operation : Finding Maximum Marks out Partition-Wise Accumulators
def comb_op(accumulator1, accumulator2):
return accumulator1 + accumulator2
Но я получил следующий результат:
("Joseph", ("Maths", 83,"Physics", 74, "Chemistry", 91, "Biology", 82)
("Jimmy", ("Maths", 69, "Physics", 62, "Chemistry", 97, "Biology", 80)
("Tina", ("Maths", 78, "Physics", 73, "Chemistry", 68)
Какой-нибудь намек на получение желаемого выхода будет так ценится?
Как мы можем сделать то же самое, если у нас есть фрейм данных pyspark с тремя столбцами:
<student, course, grade>