Для этого вам необходимо понять, как Spark распределяет задания по этапам и как они их обрабатывают.
Все этапы в одном искровом приложении будут работать последовательно. Это граф DAG, и каждый этап зависит от его родителя. Поэтому, если вы хотите запускать несколько задач (заданий) одновременно, вам нужно разделить свои задания на разные приложения и отправить каждое из них.
И все, что вызывает перераспределение данных между узлами, всегда создает новый этап. Поэтому, если вам нужно получить одноэтапное приложение, вам нужно ограничить перераспределение данных между узлами (возможно, как было сказано ранее, разделив ваши задания на разные приложения или переписав некоторую логику для уменьшения перетасовки данных).