Создает ли неявные классы Scala какие-либо издержки во время выполнения?
Не в вашем случае. * Неявные некоторые накладные расходы, когда неявным типом является AnyVal (таким образом, должен быть упакован). Последствия разрешаются во время компиляции, и, за исключением нескольких вызовов виртуальных методов, не должно быть никаких накладных расходов.
Создает ли перемещение объекта dataframe между методами какие-либо издержки с точки зрения вызовов методов или сериализации?
Нет, не более, чем любой другой тип. Очевидно, что сериализации не будет.
... если я передам фреймы данных между методами в коде Spark, это может создать замыкание и в результате приведет к родительскому классу, который содержит объект dataframe.
Только если вы используете переменные с областью видимости внутри вашего фрейма данных, например filter($"col" === myVar)
, где myVar
объявлено в области действия метода. В этом случае Spark может сериализовать класс упаковки, но этого легко избежать. Помните, что кадры данных передаются довольно часто и довольно глубоко внутри кода Spark, и, вероятно, в любой другой библиотеке, которую вы можете использовать (например, источники данных).
Очень часто (и удобно) использовать неявные классы расширения, как вы.