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($"*"))