我希望在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}")
提前感谢任何想法/反馈。
答案 0 :(得分:1)
count
方法,当你看到返回Long
时,没有可用的执行计划。
您必须使用延迟转换:
import org.apache.spark.sql.functions.count
df.select(count($"*"))
或
df.groupBy().agg(count($"*"))