apache-spark - Spark 2.x - 如何生成简单的解释/执行计划

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

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

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

最佳答案

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

您必须使用惰性转换,或者:

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

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

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

关于apache-spark - Spark 2.x - 如何生成简单的解释/执行计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575490/

相关文章:

scala - 如何使用反射实例化 Scala 对象

scala - Spark 中的时间戳格式和时区(scala API)

apache-spark - 多个 SpartContext 在同一个 JVM 上运行

scala - 在搜索隐式转换时,Scala 是否使用目标类型?

scala - Custom Slick Codegen 在 `${container} trait` 之外生成映射的案例类?

apache-spark - Spark分桶读取性能

java - 如何获取变量中的数据帧值

scala - 使用 Scala for Spark 编写 Parquet 文件,无需将 Spark 作为依赖项

scala - 如何将 RDD[(String, String)] 转换为 RDD[Array[String]]?