即使枢轴不是操作,Spark 枢轴也会调用作业

the*_*tom 3 apache-spark apache-spark-sql

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

val aggDF = df.groupBy("id").pivot("col1")
Run Code Online (Sandbox Code Playgroud)

导致调用 Job。使用 Notebook 在 Databricks 下运行。这样就得到了:

(1) Spark Jobs
    Job 4 View     (Stages: 3/3)
       Stage 12:     8/8
       Stage 13:     200/200
       Stage 14:     1/1
Run Code Online (Sandbox Code Playgroud)

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

与往常一样,我无法在文档中找到合适的参考来解释这一点,但可能与被pivot视为操作或调用 Spark 的某个方面(即操作)有关。

bai*_*rek 5

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
Run Code Online (Sandbox Code Playgroud)

def pivot(pivotColumn: Column, values: Seq[Any]): RelationalGroupedDataset
Run Code Online (Sandbox Code Playgroud)