首页 > 解决方案 > 在 DAG 中为 Spark 中的相同操作生成重复作业

问题描述

我有一个火花流作业,我从消息队列接收数据并处理一堆记录。在此过程中,我在数据集上有一个take()方法。尽管采取行动以预期的方式发生,但在 DAG 可视化中,我看到创建了多个作业 ID,并且它们都具有相同的采取行动。仅当数据为数十万条记录时才会发生这种情况。在本地机器上运行数十条记录时,我没有观察到多余的作业。谁能帮我理解这种行为背后的原因?

有向无环图

作业 ID -(91 到 95)基本上运行相同的操作。以下是与上述操作相对应的代码片段。

val corruptedMessageArray: Array[ String ] = corruptedMessageDs.take(1);
    if ( !corruptedMessageArray.isEmpty ) {
        val firstCorruptedMessage: String = corruptedMessageArray( 0 )
    }

标签: scalaapache-sparkbigdataspark-streamingapache-spark-dataset

解决方案


您的问题似乎是 Spark 是否创建了重复的作业。

如果您查看屏幕截图,您会发现作业具有不同数量的任务,因此这不是简单的重复问题。

我不确定到底发生了什么,但似乎对于大型数据集take()需要几个快速的后续工作。也许是因为它设计了工作,也许是因为它需要尝试需要完成多少工作。


推荐阅读