Spark запускает 1 параллельную задачу для каждого раздела RDD / DataFrame (до количества ядер в кластере).
Если в вашем кластере 20 ядер, у вас должно быть как минимум 20 разделов (на практике в 2-3 раза больше).С другой стороны, один раздел обычно не должен содержать более 128 МБ.
, поэтому вместо двух строк, которые перераспределяют ваш фрейм данных в 1 разделение:
df1r = df1.repartition(1)
df2r = df2.repartition(1)
Перераспределение ваших данныхна основе столбца 'id', соединяющего ключ, на n разделов.(n зависит от размера данных и количества ядер в кластере).
df1r = df1.repartition(n, "id")
df2r = df2.repartition(n, "id")