即使数据透视表不是操作,Spark数据透视表也会调用Job

时间:2019-12-28 17:19:10

标签: apache-spark apache-spark-sql

可能是一个愚蠢的问题,但我注意到:

val aggDF = df.groupBy("id").pivot("col1")

导致一个作业被调用。在Databricks下使用Notebook运行。这是得到的:

(1) Spark Jobs
    Job 4 View     (Stages: 3/3)
       Stage 12:     8/8
       Stage 13:     200/200
       Stage 14:     1/1

我不知道pivot是文档中的一项操作。

像往常一样,我在文档中找不到合适的参考资料来解释这一点,但可能与pivot被视为Action或将Spark称为Action的某个方面有关。

1 个答案:

答案 0 :(得分:1)

pivot中有RelationalGroupedDataset的两个版本。

如果仅传递列,Spark必须获取所有不同的值以生成列,并执行collect

更推荐使用另一种方法,但需要您事先知道可能的值以生成列。

您可以看一下源代码:https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/RelationalGroupedDataset.scala

def pivot(pivotColumn: Column): RelationalGroupedDataset

vs

def pivot(pivotColumn: Column, values: Seq[Any]): RelationalGroupedDataset