ds.as[case class].joinWith(df2.as[csse class 2], ...)
С as нужно быть очень аккуратным, так как если мне не изменят память то он только вью создаёт на указанный дата класс, но под капотом продолжает таскать все что было
У нас так делали выбор на 50+ полей, потом as с 2 полями и потом удивлялись откуда в шафле потом 100+гб