подсчитывать значения в списке, используя RDD в PySpark - PullRequest
0 голосов
/ 01 мая 2020

Я застрял в проблеме нахождения счета каждой зарплаты для каждого города, я использую только RDD для решения этой проблемы, что означает, что DF не используется и нет функций из какой-либо библиотеки.

мой код равно data= cities.map(lambda x: ((x.split()[0], int(x.split()[1])))).groupByKey().mapValues(list)

вывод этого кода: ('cityX',[54,40,43,54,43,55])

Я хочу найти счет каждой зарплаты для cityX и затем взять максимальный счет для этого города.

Я использую оболочку PySpark python.

желаемый вывод - ('cityX',[(54,1),(40,1),(43,1),(54,1),(43,1),(55,1)])

, какую операцию я могу использовать, чтобы дать каждому окладу номер 1, а затем подсчитать 1 для каждого, путем держать ключ как есть?

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете использовать map, чтобы добавить 1 к каждому элементу СДР в качестве нового кортежа (RDDElement, 1) и groupByKey и mapValues(len) для подсчета каждой пары город / зарплата. Например:

salaries = sc.parallelize([("city1",100000),("city2", 85000),("city1",155000),("city2",180000),("city2",180000)])

salaries.map(lambda x: (x, 1)).groupByKey().mapValues(len).collect()

Результат:

[(('city2', 85000), 1),
 (('city2', 180000), 2),
 (('city1', 100000), 1),
 (('city1', 155000), 1)]
...