Почему преобразование Spark DataFrame в RDD требует полного переопределения?

В вашем вопросе есть несколько недоразумений:

  • Во-первых, вы ссылаетесь на ссылку POSIX, которая часто следует за стандартом C, но это не обязательно.
  • Раздел, который вы цитируете, является информативным , а не фактическим, и, как таковой, может вообще не отражать стандарт C. И как таковой он также не является авторитетным.
  • В цитате также говорится, что способность пользователей отменять или переопределять макросы - это то, что можно отнять. Макросы в заголовочном файле не будут затронуты этим.
  • Наконец, в нем также говорится, что возможность может быть удалена , а не что он будет или был.

9
задан Community 5 February 2019 в 23:36
поделиться

1 ответ

TL; DR Это потому, что внутренний RDD не RDD[Row].

Учитывая, что DataFrame равен DataSet[Row], а DataSet составлен из RDD

Это огромное упрощение. Прежде всего DataSet[T] не означает, что вы взаимодействуете с контейнером из T. Это означает, что если вы используете подобный коллекции API (часто называемый строго типизированным), внутреннее представление будет декодировано в T.

Внутреннее представление - это двоичный формат, используемый внутренне компанией Tungsten. Это представление является внутренним и подвержено изменениям, и его уровень слишком низок для использования на практике.

Промежуточным представлением, которое обнажает эти данные, является InternalRow - rddQueryExecution.toRDD на самом деле RDD[InternalRow]. Это представление (есть разные реализации) все еще выставляет внутренние типы, считается «слабо» закрытым, как все объекты в o.a.s.sql.catalyst (доступ явно не ограничен, но API не задокументирован), и довольно сложно взаимодействовать.

Это когда декодирование вступает в игру и поэтому вам нужно полное «переопределение» - для преобразования внутренних, часто небезопасных, объектов во внешние типы, предназначенные для публичного использования.

Наконец, , чтобы повторить мое предыдущее утверждение - рассматриваемый код не будет выполнен, когда вызывается getNumPartitions.

0
ответ дан user10938362 5 February 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: