Мне интересно, можем ли мы заставить Spark использовать пользовательский ключ разделения во время операции соединения с двумя фреймами данных.
Например, давайте рассмотрим
df1: DataFrame - [groupid, other_column_a]
df2: DataFrame - [groupid, other_column_b]
Если я запускаю
df_join = df1.join(df2, "groupid")
Spark установит «groupid» в качестве ключа раздела и выполнит объединение для каждого раздела.Проблема в том, что это может привести к нехватке памяти на машине, если раздел слишком большой.
Тем не менее, теоретически возможно выполнить объединение, скажем, (groupid, other_column_a)
в качестве ключа разделения (чтобы уменьшить размеркаждый раздел).
Возможно ли это сделать с помощью Spark?Я попытался сделать df1.repartition("group_id","other_column_a")
авансом, но это переопределяется соединением (я проверяю это с помощью df_join.explain()
).Я не могу найти в Интернете ни одного ресурса, объясняющего, как это сделать.
Спасибо!