Хорошо, обновление вопроса.
Подводя итог: ВНУТРИ того же действия, left_semis будет повторно использовать трансляции, в то время как обычные / левые соединения не будут.Не уверен, что это связано с тем фактом, что Spark / разработчики уже знают, что столбцы этого DF вообще не влияют на вывод, поэтому они могут использовать его повторно, или просто отсутствует искра оптимизации.
Моя проблема в основном решена, , хотя было бы замечательно, если бы кто-то знал, как сохранить трансляцию между действиями.
Если я использую left_semi (который является объединениемя собираюсь использовать в моем реальном приложении), трансляция выполняется только один раз.
С:
dfNormalxx.join(dfBroadcasted, Seq("age"),"left_semi")
.join(dfBroadcasted, Seq("age"),"left_semi").count
План становится (я также изменил размер, чтобы он соответствовал моему реальномуодин, но это не имело никакого значения):
![enter image description here](https://i.stack.imgur.com/Y5CZH.png)
Также общее время стены намного лучше, чем при использовании "left_semi" (я установил 1 исполнителя такон не распараллеливается, просто хотел проверить, действительно ли работа выполнялась дважды):
![enter image description here](https://i.stack.imgur.com/NXKOO.png)
Несмотря на то, что мой сбор занимает 10 секунд,это ускорит чтение таблицы + groupBys, которые занимают 6-7 минут