【问题标题】:Spark 2.x - How to generate simple Explain/Execution PlanSpark 2.x - 如何生成简单的解释/执行计划
【发布时间】:2018-05-29 02:22:59
【问题描述】:

我希望在 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}")

提前感谢您的任何想法/反馈。

【问题讨论】:

  • explain 是作为 Dataset/DataFrame API 的一部分提供的 Spark SQL 函数。当您执行countcollect 之类的操作时,它会分别返回LongArray 类型,它们没有explain 作为其成员。

标签: apache-spark scala-2.11 apache-spark-2.2


【解决方案1】:

count 方法被热切评估,如您所见返回 Long,因此没有可用的执行计划。

您必须使用惰性转换:

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

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

df.groupBy().agg(count($"*"))

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2012-12-26
    • 2011-03-10
    • 2012-11-12
    • 2015-12-21
    相关资源
    最近更新 更多