Spark 2.x - Как создать простой план объяснения / выполнения

Я надеюсь сгенерировать план объяснения / выполнения в Spark 2.2 с некоторыми действиями над фреймом данных. Цель здесь состоит в том, чтобы гарантировать, что сокращение раздела происходит, как ожидалось, прежде чем я запускаю работу и использую ресурсы кластера. Я попробовал поиск документации Spark и SO поиск здесь, но не смог найти синтаксис, который работал бы для моей ситуации.

Вот простой пример, который работает как ожидалось:

scala> List(1, 2, 3, 4).toDF.explain
== Physical Plan ==
LocalTableScan [value#42]

Вот пример, который работает не так, как ожидалось, но надеется приступить к работе:

scala> List(1, 2, 3, 4).toDF.count.explain
<console>:24: error: value explain is not a member of Long
List(1, 2, 3, 4).toDF.count.explain
                               ^

А вот более подробный пример, демонстрирующий конечную цель сокращения раздела, которую я надеюсь подтвердить с помощью плана объяснения.

val newDf = spark.read.parquet(df).filter(s"start >= ${startDt}").filter(s"start <= ${endDt}")

Заранее спасибо за любые мысли / отзывы.

1 ответ

count метод охотно оценивается и, как вы видите, возвращает Long, так что нет плана выполнения доступны.

Вы должны использовать ленивое преобразование:

import org.apache.spark.sql.functions.count

df.select(count($"*"))

или же

df.groupBy().agg(count($"*"))
Другие вопросы по тегам