为什么一个操作需要多个作业才能在spark-scala中完成

为什么一个操作需要多个作业才能在spark-scala中完成,scala,apache-spark,Scala,Apache Spark,我正在spark scala中的数据帧上执行透视操作。但对于单轴,需要完成多个作业(如下图所示) 可能的原因是什么 这是一个相当普遍的问题,因为我在其他动作中也遇到过同样的问题。具体来说,pivot会导致Spark启动水下作业,以使pivot值旋转。您可以提供它们来避免afaik,但通常不会这样做 show和读取s3路径也会导致Spark生成额外的作业,也会take,以及Spark的模式推断 大多数关于动作和作业的宣传语都来自RDD。使用DF和催化剂,如优化意味着可以启动一些事情,从而提高性能

我正在spark scala中的数据帧上执行透视操作。但对于单轴,需要完成多个作业(如下图所示)

可能的原因是什么


这是一个相当普遍的问题,因为我在其他动作中也遇到过同样的问题。

具体来说,
pivot
会导致Spark启动水下作业,以使pivot值旋转。您可以提供它们来避免afaik,但通常不会这样做

show
读取s3路径
也会导致Spark生成额外的作业,也会
take
,以及
Spark的模式推断

大多数关于动作和作业的宣传语都来自RDD。使用DF和催化剂,如优化意味着可以启动一些事情,从而提高性能

此外,Spark UI上的显示对于许多人来说很难跟上。作业的名称通常保持不变,但它涉及到为
广泛转换所做的工作
,涉及
洗牌
,称为
阶段
groupBy、orderBy、agg都是基于“洗牌边界”进行操作的。这就是它的工作方式。您的代码显示了这些内容


这可能会提供一些见解,以及背景中正在发生的事情。grouBy的输出通过两个阶段输入到orderBy。

您能显示代码吗?在涉及轴心点的地方,代码中有很多底层连接,这是一个相当普遍的问题。insertinto.count等出现这种情况答案在这里仍然有效,因为我们可以在Spark UI中看到pivot。请解释您的答案好吗?您需要显示代码,但pivot必须获得pivot值列表,以便在Window.partitionBy(“x”).groupBy(“x”,“c1”).pivot上执行下一步的数据透视var df31_in=df.with column(“c1”,max(“c2”)(“RANK_NUM”).agg(first(“x2”)。列重命名为(“c1”、“c2”)