В вашем вопросе есть несколько недоразумений:
не будут затронуты этим. TL; DR Это потому, что внутренний RDD
не RDD[Row]
.
Учитывая, что DataFrame равен
blockquote>DataSet[Row]
, аDataSet
составлен из RDDЭто огромное упрощение. Прежде всего
DataSet[T]
не означает, что вы взаимодействуете с контейнером изT
. Это означает, что если вы используете подобный коллекции API (часто называемый строго типизированным), внутреннее представление будет декодировано вT
.Внутреннее представление - это двоичный формат, используемый внутренне компанией Tungsten. Это представление является внутренним и подвержено изменениям, и его уровень слишком низок для использования на практике.
Промежуточным представлением, которое обнажает эти данные, является
InternalRow
-rddQueryExecution.toRDD
на самом делеRDD[InternalRow]
. Это представление (есть разные реализации) все еще выставляет внутренние типы, считается «слабо» закрытым, как все объекты вo.a.s.sql.catalyst
(доступ явно не ограничен, но API не задокументирован), и довольно сложно взаимодействовать.Это когда декодирование вступает в игру и поэтому вам нужно полное «переопределение» - для преобразования внутренних, часто небезопасных, объектов во внешние типы, предназначенные для публичного использования.
Наконец, , чтобы повторить мое предыдущее утверждение - рассматриваемый код не будет выполнен, когда вызывается
getNumPartitions
.