Привет! Сегодня я хочу поделиться с вами своим опытом использования библиотеки json в Python и рассказать, как собрать маппер и редьюсер на основе предоставленного кода.Итак, давайте начнем! Чтобы начать работу с json в Python, первым делом нужно импортировать модуль json с помощью следующей строки кода⁚
python
import json
После этого можно приступить к чтению данных из json-файлов и обработке их. В предоставленном коде мы видим цикл, который проходит по всем файлам в директории ‘imdb-user-reviews’ с расширением ‘.json’ и загружает их содержимое в переменную info с помощью функции json.load⁚
python
for path in Path(‘imdb-user-reviews’).glob(‘**/*’):
if path.is_file and path.suffix ‘.json’⁚
with open(path, ‘r’) as f⁚
info json.load(f)
Затем из объекта info мы извлекаем значение рейтинга фильма и приводим его к типу float⁚
python
score float(info[‘movieIMDbRating’])
Далее в коде мы видим некоторые математические операции, которые представляют собой подсчет среднего значения рейтинга фильмов и стандартного отклонения. Эти значения не используются в данном коде, поэтому давайте сосредоточимся на маппере и редьюсере.Маппер и редьюсер ⎼ это две основные части программы, написанной на основе модели MapReduce. В нашем случае, мы можем использовать данные из json-файлов и вычислить для каждого фильма его средний рейтинг.Маппер будет работать следующим образом⁚ для каждого json-файла он будет выдавать пару ключ-значение, где ключом будет являться название фильма, а значением его рейтинг. Это может быть выполнено с использованием функции print и разделителя, например, табуляции. Вот пример маппера⁚
python
for path in Path(‘imdb-user-reviews’).glob(‘**/*’):
if path.is_file and path.suffix ‘.json’⁚
with open(path, ‘r’) as f⁚
info json.load(f)
score float(info[‘movieIMDbRating’])
print(info[‘movieTitle’], ‘\t’, score)
Представленный пример выведет название фильма и его рейтинг, разделенные табуляцией.Теперь перейдем к редьюсеру. Редьюсер принимает ключи и значения от маппера и группирует все значения для каждого ключа. Затем он может выполнять различные операции для агрегации данных. В нашем случае, мы можем вычислить среднее значение рейтинга для каждого фильма из всех полученных значений. Вот пример редьюсера⁚
python
current_movie None
total_rating 0
count 0
for line in sys.stdin⁚
movie, rating line.strip.split(‘\t’)
rating float(rating)
if current_movie movie⁚
total_rating rating
count 1
else⁚
if current_movie⁚
average_rating total_rating / count
print(current_movie, ‘\t’, average_rating)
current_movie movie
total_rating rating
count 1
if current_movie⁚
average_rating total_rating / count
print(current_movie, ‘\t’, average_rating)
В данном примере мы используем цикл for для перебора строк, которые поступают на вход редьюсеру. Мы разделяем каждую строку на ключ и значение (название фильма и его рейтинг) и приводим рейтинг к типу float. Затем мы выполняем проверку⁚ если название фильма не изменилось, то мы суммируем рейтинг и увеличиваем счетчик. Если название фильма изменилось, то мы выводим средний рейтинг для предыдущего фильма и обновляем значения переменных. В самом конце редьюсера мы также выводим средний рейтинг для последнего фильма.
Вот и все! Мы рассмотрели примеры маппера и редьюсера на основе предоставленного кода. Надеюсь, эта статья была полезной и помогла вам лучше понять работу с json в Python и создание маппера и редьюсера. Удачи вам в дальнейших исследованиях и программировании!