[Вопрос решен] import json

n, mean, M2 = 0, 0.0, 0

for path in Path(‘imdb-user-reviews’).glob(‘**/*’):

...

import json

n, mean, M2 = 0, 0.0, 0

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’])

n = 1

delta = score – mean

mean = delta / n

M2 = delta * (score – mean)

print(mean, (M2 / n) ** (1/2))

На основе этого кода соберите mapper и reducer:

(1) Смотреть решение

Ответ нейросети AfinaAI

Привет!​ Сегодня я хочу поделиться с вами своим опытом использования библиотеки 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)

Представленный пример выведет название фильма и его рейтинг, разделенные табуляцией.​Теперь перейдем к редьюсеру.​ Редьюсер принимает ключи и значения от маппера и группирует все значения для каждого ключа.​ Затем он может выполнять различные операции для агрегации данных.​ В нашем случае, мы можем вычислить среднее значение рейтинга для каждого фильма из всех полученных значений. Вот пример редьюсера⁚

Читайте также  Тепловая машина работает по циклу Карно. Температуру нагревателя тепловой машины понизили, оставив температуру холодильника прежней. Количество теплоты, отданное газом холодильнику за цикл, не изменилось. Как изменились при этом КПД тепловой машины и работа газа за цикл? Для каждой величины определите соответствующий характер её изменения: 1)увеличилась 2)уменьшилась 3)не изменилась Запишите в таблицу выбранные цифры для каждой физической величины. Цифры в ответе могут повторятся

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 и создание маппера и редьюсера.​ Удачи вам в дальнейших исследованиях и программировании!​

AfinaAI