Карта карт в писпарке - PullRequest
0 голосов
/ 14 марта 2020

У меня есть СДР, который выглядит следующим образом:

print rdd.collect():
[
    ('id2', u'lion'),
    ('id5', u'dolphin'),
    ('id2', u'tiger'),
    ('id2', u'lion'),
    ('id3', u'dolphin'),
    ('id3', u'monkey'),
]

Можно ли создать карту карт в pyspark, в которой можно было бы считать происшествия каждого животного по идентификатору? Например:

id2: {lion: 2, tiger: 1}, id3: {dolphin:1, monkey: 1}, id5: {dolphin: 1}

1 Ответ

0 голосов
/ 14 марта 2020

С Python вы можете использовать collections.Counter, чтобы подсчитать количество встречаемости каждого животного. Но вам нужен счетчик для каждого идентификатора элемента.

Вы можете создать словарь счетчиков, например:

import collections

items = [
    ('id2', u'lion'),
    ('id5', u'dolphin'),
    ('id2', u'tiger'),
    ('id2', u'lion'),
    ('id3', u'dolphin'),
    ('id3', u'monkey'),
]

counters = collections.defaultdict(collections.Counter)
for item_id, animal in items:
    counters[item_id][animal] += 1
print(counters)

Вывод:

defaultdict(<class 'collections.Counter'>,
            {'id2': Counter({'lion': 2, 'tiger': 1}),
             'id3': Counter({'dolphin': 1, 'monkey': 1}),
             'id5': Counter({'dolphin': 1})})

В результате получается словарь счетчиков.

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