Я пишу в таблицу, разбитую по месяцам. Я знаю, что мои данные составляют ≈100 МБ на раздел, нет перекоса - они поместятся в одном блоке HDFS, и я хочу убедиться, что каждый раздел получает один записанный файл. Я также знаю точное количество месяцев в моем наборе данных (что-то между 1 и 10), поэтому:
ds.repartition(nMonths, $"month").write.<options>.insertInto(<...>)
Это работает. Однако я думаю отсюда ... Поскольку Spark использует ключ ha sh для определения раздела, я не гарантирую, что каждый раздел получит данные за один месяц. Чем больше разделов у меня есть, тем меньше вероятность того, что это на самом деле - верно?
Имеет ли смысл тогда увеличивать количество разделов выше количества различных ключей?
ds.repartition(nMonths * 3, $"month").write.<options>.insertInto(<...>)
Много разделов будет пустым, но это не должно быть такой большой проблемой (не так ли?), и мы уменьшаем вероятность того, что некоторые неудачные разделы получат данные 3x / 4x, увеличив общее время выполнения. Имеет ли это смысл? Есть ли эмпирическое правило относительно фактора? Или любой другой подход для достижения того же?