Spark: подсчитать номер конкретной буквы в СДР с помощью функции агрегирования - PullRequest
0 голосов
/ 23 июня 2018

Я делаю простое назначение в Apache Spark, используя Python.Допустим, у меня есть СДР:

[('python', 1), ('spark', 1), ('context', 1), ('create', 1), ('scala', 1), ('parallel', 1), ('operation', 1), ('apache', 1), ('partition', 1), ('lambda', 1), ('class', 1), ('rdd', 1)]

И я хочу посчитать количество вхождений буквы «С» в СДР.Используя «карту», ​​я бы сделал это так:

rdd = sc.parallelize([('python', 1), ('spark', 1), ('context', 1), ('create', 1), ('scala', 1), ('parallel', 1), ('operation', 1), ('apache', 1), ('partition', 1), ('lambda', 1), ('class', 1), ('rdd', 1)])
rdd.map(lambda x: x[0].count('s')).sum()

Теперь я должен сделать то же самое, но с помощью функции «агрегат».Но я понятия не имею, как это сделать.Есть идеи?

1 Ответ

0 голосов
/ 23 июня 2018
rdd
  .aggregate(0, lambda i, x: i + x[0].count('s'), lambda i, j: i+j)

Я этого не пробовал, но все должно быть просто; первый аргумент - это zeroValue или просто 0 в нашем случае, поскольку тип результата целочисленный. Далее идет функция накопления внутри каждого раздела - в нашем случае подсчитайте букву s в каждой строке (x) и прибавьте к накопленному счету (i). Последняя функция объединяет результаты всех разделов, опять же в нашем случае прямая сумма.

Следует отметить, что PySpark имеет отличную документацию на официальном сайте Spark, и вы могли бы найти ответ там.

...