【问题标题】:why an action takes multiple jobs to get completed in spark - scala为什么一个动作需要多个工作才能在 spark 中完成 - scala
【发布时间】:2020-11-25 21:30:59
【问题描述】:

我正在 spark-scala 中的数据框之上执行枢轴操作。但是对于单个支点,它需要多个工作才能完成(如下图所示)

可能的原因是什么?

这是一个相当笼统的问题,因为我在其他操作中也遇到了同样的问题。

【问题讨论】:

  • 你能显示代码吗?枢轴所在的位置
  • 我在代码中有很多底层连接

标签: scala apache-spark


【解决方案1】:

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

showreading s3 paths 也会导致 Spark 生成额外的作业,take 以及 schema inference by Spark。

关于 Actions 和 Jobs 的大部分内容都来自 RDD。借助 DF 和 Catalysts,诸如优化之类的事情可以启动以提高性能。

此外,Spark UI 上的显示很难让很多人理解。作业的名称通常保持不变,但它涉及为wide-transformations 完成的工作,涉及shuffling,称为StagesgroupBy, orderBy, agg 所有人都根据“洗牌边界”做他们的事情。这是它的工作方式。您的代码显示了这些内容。

这个Spark: disk I/O on stage boundaries explanation 可能会提供一些见解以及背景中发生的事情。 grouBy 的输出通过两个阶段输入到 orderBy。

【讨论】:

  • 这是一个相当笼统的问题。这发生在 insertinto.count 等
  • 答案在这里仍然有效,因为我们可以在 Spark UI 中看到枢轴。
  • 你能解释一下你的答案吗?
  • 你需要展示代码,但是pivot必须得到一个pivot值列表,以便随后执行pivoting
  • var df31_in = df.withColumn("c1", max("c2") over Window.partitionBy("x") ).groupBy("x","c1").pivot(" RANK_NUM").agg(first("x2")).withColumnRenamed("c1", "c2")
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2019-05-18
相关资源
最近更新 更多