1. Почему x и y?
Создайте пару ключ-значение, например (word, 1)
. Теперь вашим ключом будет слово, а значением будет 1
. Когда вы сделаете limitByKey, он сложит все значения для того же ключа
reduceByKey(lambda x, y: x + y)
сгруппирует элементы RDDEпо ключу, который является первым элементом word
, и суммируем значения. В этом конкретном утверждении x - это один элемент, накапливающий все значения СДР, а y - любой другой элемент для того же ключа / слова. Уменьшите значения, добавив их значения для того же слова или того же ключа. Может выглядеть примерно так:
# [('This', 1), ('is', 2), ('a', 3), ('random', 1), ('sample.', 2), ('And', 2), ('world', 1), ('count', 2), ('word', 1), ('sample,', 1), ('that', 1), ('it', 1)]
2. Давайте разберем ваш следующий вопрос о wordCountsSorted = wordCounts2.map(lambda x: (x[1], x[0])).sortByKey()
Следующая строка поменяет местами (обменивает позиции) элементы кортежей. По сути, элемент в позиции 0 должен быть перемещен в позицию 1, а элемент в позиции 1 должен быть перемещен в позицию 0.
reversed_tup = wordCounts2.map(lambda x: (x[1], x[0]))
Вывод будет выглядеть так:
# [(1, 'This'), (2, 'is'), (3, 'a'), (1, 'random'), (2, 'sample.'), (2, 'And'), (1, 'world'), (2, 'count'), (1, 'word'), (1, 'sample,'), (1, 'that'), (1, 'it')]
Теперь, когда вы сделаете sortByKey
, эти кортежи будут отсортированы с использованием ключа, который, как упоминалось выше, первого элемента кортежа. Таким образом, rdd будет отсортировано по количеству слов.
wordCountsSorted = reversed_tup.sortByKey()
wordCountsSorted.collect()
# [(1, 'This'), (1, 'random'), (1, 'world'), (1, 'word'), (1, 'sample,'), (1, 'that'), (1, 'it'), (2, 'is'), (2, 'sample.'), (2, 'And'), (2, 'count'), (3, 'a')]