Что означают префиксы чисел в операторе объяснения? - PullRequest
0 голосов
/ 20 ноября 2018

Что означают (1), (6) и (3) в следующем выводе explain.Версия Spark 2.3.1.

enter image description here

1 Ответ

0 голосов
/ 21 ноября 2018

Я думаю, что именно в Spark 2.0 Spark SQL начал генерировать код Java для некоторых частей структурированных запросов.Эта функция называется Генерация Java-кода для всего этапа (он же CodeGen для всего этапа ).

Генерация Java-кода для всего этапа (или CodeGen для всей стадии)просто оптимизация физического запроса в Spark SQL, которая объединяет несколько физических операторов (как поддерево планов, поддерживающих генерацию кода) в единую функцию Java.

Вы можете узнать о том, что сгенерированные Java части кода структурированногозапрос с использованием оператора explain.

val q = spark.range(5)
  .groupBy('id % 2 as "g")
  .agg(collect_list('id) as "ids")
  .join(spark.range(5))
  .where('id === 'g)
scala> q.explain
== Physical Plan ==
*(3) BroadcastHashJoin [g#1266L], [id#1272L], Inner, BuildRight
:- *(3) Filter isnotnull(g#1266L)
:  +- ObjectHashAggregate(keys=[(id#1264L % 2)#1278L], functions=[collect_list(id#1264L, 0, 0)])
:     +- Exchange hashpartitioning((id#1264L % 2)#1278L, 200)
:        +- ObjectHashAggregate(keys=[(id#1264L % 2) AS (id#1264L % 2)#1278L], functions=[partial_collect_list(id#1264L, 0, 0)])
:           +- *(1) Range (0, 5, step=1, splits=8)
+- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
   +- *(2) Range (0, 5, step=1, splits=8)

Как вы заметили, у меня есть запрос с тремя звездочками в круглых скобках.Все эти украшения (звезда и цифры) являются частью полной оптимизации генерации Java-кода.

Числа обозначают поддеревья WholeStageCodegen , для которых Spark SQL генерирует отдельные функции, которые все вместе являютсябазовый код, который Spark SQL использует для выполнения запроса.

Вы можете увидеть код и поддеревья, используя debug неявный интерфейс.

scala> q.queryExecution.debug.codegen
Found 3 WholeStageCodegen subtrees.
== Subtree 1 / 3 ==
*(1) Range (0, 5, step=1, splits=8)

Generated code:
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...