Сокращение значений кортежа с помощью ReduByKey в Pyspark - PullRequest
0 голосов
/ 21 января 2020

Я начинаю работать с парадигмой MapReduce с Pyspark, у меня возникла проблема, и я не знаю, является ли это ошибкой программирования или что я не должен делать это таким образом.

У меня есть данные, из которых я извлекаю следующую информацию с map для каждой строки: (id, (date, length, counter)), я сделал это таким образом, чтобы извлечь всю необходимую мне информацию из файла необработанных данных и отфильтровывать зашумленные строки, чтобы я не снова использовать файл необработанных данных. Кстати: счетчик изначально равен 1, и он предназначен для добавления в будущем reduceByKey.

Теперь данные выглядят так:

data = [('45', ('28/5/2010', 0.63, 1)), ('43', ('21/2/2012', 2.166, 1)), ('9', ('12/1/2009', 2.33, 1))]

Во-первых, я я пытаюсь подсчитать количество пар ключ-значение, поэтому просто reduceByKey добавляем счетчики, я пытался сделать это следующим образом: data.reduceByKey(lambda a,b: a[2] + b[2]), который выдает следующую ошибку TypeError: 'int' object is not subscriptable.

Если a и b должны получить значение пары, элемент 2 должен иметь счетчик, я не могу обойти его. Лучше ли несколько раз отобразить файл необработанных данных, каждый раз извлекая другое необходимое значение? Должен ли я отображать эту data переменную, извлекающую пары (key, value) каждый раз, со значением, необходимым из кортежа? Просто я делаю ошибку в программировании?

Любое руководство приветствуется, спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Хорошо, я нашел проблему. При уменьшении, например, (id, (x, x, 1)), (id, (y, y, 1)), (id, (z, z, 1)), при первом уменьшении вы получите (id, 2), (id, (z, z, 1)), поэтому при повторном уменьшении число 2 в первом элементе не может быть подписано, я должен сохранить структуру данных во время процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...