Код Middle Spark обновлено

Найти перекос и посчитать эффект соления

Условие

Дан список ключей строк большой таблицы. Напишите skew_report(keys, partitions, salt):

  • без соления строка уходит в партицию hash_key(key) % partitions, где hash_key(k) = sum(ord(c) for c in k) (упрощение для задачи);
  • с солением к ключу i-й строки добавляется суффикс "#" + str(i % salt), и партиция считается по солёному ключу;
  • перекос: отношение максимальной загрузки партиции к средней (среднее = число строк / partitions), округлённое до 2 знаков.

Верните {"before": перекос без соли, "after": перекос с солью}. Для пустого входа оба 0.0.

Примеры

skew_report(["a", "a", "a", "a", "a", "a", "a", "a"], 4, 4) // {"before":4,"after":1}
skew_report([], 4, 4) // {"before":0,"after":0}
skew_report(["a", "b", "c", "d"], 4, 1) // {"before":1,"after":1}

Как подойти

Подсказки: 2
  1. Посчитайте загрузку партиций списком счётчиков.
  2. Солёный ключ: k + "#" + str(i % salt).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.