У меня возникли проблемы со следующими упражнениями по сокращению карты в Spark с помощью python. Функция map возвращает следующий RDD.Смутно о поведении функции Уменьшить на карте уменьшить
РДД = [(3, ({0: [2], 1: [5], 3: [1]}, множество ([2]))),
(3, ({0 : [4], 1: [3], 3: [5]}, установите ([1])),
(1, ({0: [4, 5], 1: [2]}, установите ([3)))]
Я написал функцию редуктора, который должен сделать некоторые вычисления на кортежи с тем же ключом (в предыдущем примере первые два имеют ключ = 3, и последний ключ 1)
def Reducer(k, v):
cluster = k[0]
rows = [k[1], v[1]]
g_p = {}
I_p = set()
for g, I in rows:
g_p = CombineStatistics(g_p, g)
I_p = I_p.union(I)
return (cluster, [g_p, I_p])
проблема в том, что я ожидаю, что k и v всегда будут иметь один и тот же ключ (т. k[0]==v[0]
). Но это не относится к этому коду.
Я работаю над платформой Databricks, и, честно говоря, это кошмар, не способный отлаживать, иногда даже не «печатать». Это очень сложно работать в этой среде.
Так что, несмотря на то, что в функции mapper я возвращаю (ключ, значение), только параметр значения будет передан редуктору? –
Справа. И в результате вы возвращаете только часть «значений» RDD. – Mariusz