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}")

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


person user9074332    schedule 29.05.2018    source источник
comment
explain — это функция Spark SQL, предлагаемая как часть API набора данных/DataFrame. Когда вы делаете что-то вроде count или collect, он возвращает типы Long и Array соответственно, которые не имеют explain в качестве члена.   -  person Sivaprasanna Sethuraman    schedule 29.05.2018


Ответы (1)


Метод count с готовностью оценивается и, как вы видите, возвращает Long, поэтому план выполнения недоступен.

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

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

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

or

df.groupBy().agg(count($"*"))
person Alper t. Turker    schedule 29.05.2018