Я предполагаю, что вы имеете в виду, что разные пользователи представляют свои собственные программы или действия спарк-оболочки, а не параллелизм внутри одного приложения как такового.
В таком случае лучшим выбором будут Fair Fair Scheduler Pools или Spark Dynamic Resource Allocation. Все можно найти здесь https://spark.apache.org/docs/latest/job-scheduling.html
Эта область довольно трудна для понимания, так как существует понятие:
... "Обратите внимание, что ни один из режимов в настоящее время не обеспечивает совместное использование памяти между приложениями. Если вы хотите обмениваться данными таким образом, мы рекомендуем запустить приложение на одном сервере, которое может обслуживать несколько запросов, запрашивая одни и те же СДР.".
Можно найти противоположные утверждения по переполнению стека относительно этого пункта. Apache Ignite - это то, что здесь имеется в виду, это также может послужить вам.