Подсчитайте количество ключей для каждого значения набора, помеченного этим ключом - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть пара СДР, например:

id   value
id1  set(1232, 3,1,93,35)
id2  set(321,42,5,13)
id3  set(1233,3,5)
id4  set(1232, 56,3,35,5)

Теперь я хочу получить общее количество идентификаторов на значение, содержащееся в наборе.Таким образом, вывод для приведенной выше таблицы должен выглядеть примерно так:

set value  count
    1232   2
    1      1
    93     1
    35     2
    3      3
    5      3
    321    1
    42     1
    13     1
    1233   1
    56     1

Есть ли способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018
yourrdd.toDF().withColumn(“_2”,explode(col(“_2”))).groupBy(“_2”).count.show
0 голосов
/ 06 сентября 2018

Я бы порекомендовал использовать API-интерфейс dataframe, поскольку он проще и понятнее. Используя этот API, проблему можно решить с помощью explode и groupBy следующим образом:

df.withColumn("value", explode($"value"))
  .groupBy("value")
  .count()

Вместо использования СДР, одним из возможных решений является использование flatMap и aggregateByKey:

rdd.flatMap(x => x._2.map(s => (s, x._1)))
  .aggregateByKey(0)((n, str) => n + 1, (p1, p2) => p1 + p2)

Результат одинаков в обоих случаях.

...