Код 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
- Посчитайте загрузку партиций списком счётчиков.
- Солёный ключ:
k + "#" + str(i % salt).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.