Spark - это вычисляемый ленивый фреймворк, поэтому ни одно из преобразований , например: join, не вызывается до тех пор, пока вы не вызовете action .
Итак, продолжайте, что вы сделали
from pyspark import StorageLevel
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
df_AA.persist(StorageLevel.MEMORY_AND_DISK)
df_AA.show()
Доступно несколько вариантов сохранения, поэтому выбор MEMORY_AND_DISK приведет к тому, что данные, которые не могут быть обработаны в памяти, в DISK.
Также ошибки GC могут быть результатом меньшего объема памяти DRIVER, предоставленной для запуска Spark Application.