Как рассчитать ByValue в Pyspark с дубликатом ключа? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь получить все уникальные значения СДР и соответствующие им числа вхождений.Я пытался преобразовать список элементов в RDD и пытался получить вхождение каждого значения.

X_RDD = sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1])
Y_MAP = X_RDD.map(lambda m:(m,1))
for i in Y_MAP.countByValue():print(i)

Я получил следующий вывод:

8,1
7,1
6,1
5,1
4,1
3,1
2,1
1,1

Как я могу получить такие случаи, какниже:

1,6
2,3
3,1
4,2
5,1
6,1
7,1
8,1

1 Ответ

0 голосов
/ 13 февраля 2019

countByValue (): Возвращает счетчик каждого уникального значения в этом СДР в виде словаря пар (значение, количество), и для доступа к этому словарю вам необходимо .items().Эту часть вы пропустили.

Метод 1: Зеркально отражает ваш метод

sorted(sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1]).countByValue().items())
    [(1, 6), (2, 3), (3, 1), (4, 2), (5, 1), (6, 1), (7, 1), (8, 1)]

Метод 2: Это более элементарно.

X_RDD = sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1])
Y_MAP = X_RDD.map(lambda m:(m,1))

x = Y_MAP.groupByKey().mapValues(lambda x:list(x))
x.mapValues(lambda x:len(x)).collect()
    [(1, 6), (2, 3), (3, 1), (4, 2), (5, 1), (6, 1), (7, 1), (8, 1)]
...