全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  行业资讯  >  详情

什么是DAG?DAG有向无环图实例讲解

来源:千锋教育
发布人:qyf
2020-12-30

推荐

在线提问>>

  DAG(Directed Acyclic Graph)叫做有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG。DAG是一种非常重要的图论数据结构。如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就是有向无环图,具体如图1所示。

1

图1 DAG有向无环图

  从图1可以看出,4→6→1→2是一条路径,4→6→5也是一条路径,并且图中不存在从顶点经过若干条边后能回到该点。在Spark中,有向无环图的连贯关系被用来表达RDD之间的依赖关系。其中,顶点表示RDD及产生该RDD的操作算子,有方向的边表示算子之间的相互转化。

  根据RDD之间依赖关系的不同可以将DAG划分成不同的Stage(调度阶段)。对于窄依赖来说,RDD分区的转换处理是在一个线程里完成,所以窄依赖会被Spark划分到同一个Stage中;而对于宽依赖来说,由于有Shuffle的存在,所以只能在父RDD处理完成后,下一个Stage才能开始接下来的计算,因此宽依赖是划分Stage的依据,当RDD进行转换操作,遇到宽依赖类型的转换操作时,就划为一个Stage。Stage的具体划分如图2所示。

2

图2 Stage的划分

  在图2中,创建了三个RDD的实例A、C以及E。当RDD的实例A做groupByKey转换操作生成B时,由于groupByKey转换操作属于宽依赖类型,所以就把实例A划分为一个Stage,如Stage1;当实例C做map转换操作生成D, D与实例E做union转换操作生成F,由于map和union转换操作都属于窄依赖类型,因此不进行Stage的划分,而是将C、D、E、F加入到同一个Stage中;当F与B进行join转换操作时,由于这时的join操作是非协同划分,所以属于宽依赖,因此会划分为一个Stage,如Stage2;剩下的B和G被划分为一个Stage,如Stage3。

  如果大家正在学习IT知识或者是对IT知识比较感兴趣的话,都可以添加我们的官方qq群,不仅可以获得IT学习资料,并且群内还有专业的IT老师定期为大家解决学习所遇到的问题,想要学习的小伙伴,不要错过。

相关文章

抖音养号的正确方法,务必收藏!

前端工程师的主要工作包括哪些?

响应式和自适应的区别,纯干货来了

学影视后期大概多少钱,哪个机构好?

程序开发培训多少钱?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取