Dataframes - это просто наборы данных с кодировщиком для класса Spark Row. Таким образом, по сути, Dataframe - это набор данных.
Кодеры также вообще не используются, если вы не используете функции без столбцов (функции, которые принимают лямбда-выражения, такие как map, reduce, flatmap). В тот момент, когда вы это делаете используйте одну из этих функций, так как вы разбиваете кодогенерацию, которую выполняет катализатор, на две части, это приведет к снижению производительности, поскольку он не может оптимизировать лямбда. Это означает, что вы, вероятно, вообще не хотите использовать эти функции и можете полностью игнорировать разницу набора данных / Dataframe, поскольку, если вы не используете эти функции, вы никогда не будете кодировать.
По моему опыту, Преимущество безопасности типов, которое вы можете получить с помощью набора данных, и типы apis не стоят огромного удара по производительности. Почти во всех случаях я обнаружил, что вы должны оставаться в Dataframes и использовать только функции на основе столбцов и udf для лучшей производительности.
В качестве дополнительного примечания, кодировщик будет использоваться только при распараллеливании коллекции, все источники данных будут предоставлять Spark строки или внутренние строки, поэтому ваш кодировщик не будет использоваться для большинства источников.