Все смотрят прямо на меня. Если у вас небольшой набор данных, то isin
в порядке.
1) Убедитесь, что вы можете увеличить количество ядер. ядро executor = 5
Для каждого исполнителя не рекомендуется более 5 ядер. Это основано на исследовании, в котором любое приложение с более чем 5-ю параллельными потоками начало бы снижать производительность.
2) Убедитесь, что у вас есть хорошее / равномерное разбиение разделов.
Пример (только для отладки цель не для производства):
import org.apache.spark.sql.functions.spark_partition_id
yourcacheddataframe.groupBy(spark_partition_id).count.show()
Это напечатает номер раздела искры и сколько записей существует в каждом разделе. основываясь на том, что вы можете перераспределить, если вы хотите больше парлелизма.
3) spark.dynamicAllocation.enabled
может быть другим вариантом.
Например:
spark-submit --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.cachedExecutorIdleTimeout=100 --conf spark.shuffle.service.enabled=true
вместе со всеми другие необходимые реквизиты ..... вот для этой работы. Если вы предоставите эти реквизиты в spark-default.conf, они будут применяться для всех заданий.
При всех этих вышеупомянутых параметрах время обработки может сократиться.