什么是 DAG?带有示例的实用指南

TG Data Set: A collection for training AI models.
Post Reply
mostakimvip06
Posts: 317
Joined: Mon Dec 23, 2024 5:02 am

什么是 DAG?带有示例的实用指南

Post by mostakimvip06 »

数据工作流和管道通常需要精确协调才能保证任务按正确顺序执行。有向无环图 (DAG) 是一种强大的工具,可以有效管理这些工作流并避免错误。

在本文中,我们将探讨 DAG 及其在数据工程中的重要性,回顾它们的一些应用,并通过使用Airflow 的实际示例了解如何使用它们。

什么是 DAG?
要理解什么是 DAG,我们首先来定义一些关键概念。在计算机科学中,图是一种由节点和边组成的非线性数据结构。节点表示单个实体或对象,而边连接这些节点并表示它们之间的关系或连接。

在有向图中,这些边具有特定的方向,表示节点之间的单 瑞士赌博数据 向关系。这意味着,如果有一条边从节点 A 到节点 B,则它意味着从 A 到 B 的连接,但不一定是从 B 到 A 的连接。

上图显示了一个有向图,其中三个节点相互连接。下图显示了一个无向图,其中最后两个节点具有双向关系。

有向图的视觉解释。图片来源:天文学家

路径是由有向边连接的一系列节点。它从特定节点开始,然后沿着边的方向到达另一个节点。路径可以是任意长度,从单个节点到多个节点的序列,只要始终遵循边的方向即可。

现在我们有了一些基本的定义,让我们看看什么是 DAG:DAG 是一个没有有向环的有向图,其中每个节点代表一个特定的任务,每条边表示它们之间的依赖关系。

左图为非循环图,其中四个任务相互连接,没有循环。右图为非循环图,其中任务 1 和任务 4 之间存在循环关系无环图的视觉解释。图片来源:天文学家

DAG 的关键之处在于它们是非循环的,这意味着一旦您从一个节点开始,就只能向前移动,永远不会返回到上一个节点。这确保任务可以按顺序执行而不会导致无限循环。DAG 通常具有层次结构,其中任务被组织成级别或层。较高级别的任务通常依赖于较低级别的任务的完成。

成为一名数据工程师
培养 Python 技能,成为一名专业的数据工程师。
为什么 DAG 在数据工程中如此重要
作为数据工程师或执行数据工程任务的人员,您经常面临构建复杂数据管道的挑战,这些管道需要执行步骤,每个步骤都依赖于前一个步骤。这就是 DAG 的作用所在!

由于 DAG 可以将任务表示为节点,将依赖项表示为边,因此它们可以强制执行逻辑执行顺序,确保任务根据其依赖项按顺序执行。这可以防止因任务无序运行而导致的错误和不一致。此外,如果某个步骤失败,DAG 可以识别并重新运行受影响的任务,从而节省时间和精力。

如果您是数据管道构建的新手或想要加强基础知识,那么“理解数据工程”课程将为您提供一个很好的起点。

DAG 的非循环特性是使其成为数据管道的理想选择的关键特性之一。它们确保任务可以在没有无限循环或递归依赖的情况下执行,从而避免导致系统不稳定。

让我们考虑一个数据管道的简单示例:

该图显示了 A DAG,其中节点 a 连接到 B 和 C,然后连接到 D,最后连接到 E这个简单的 DAG 结构包含节点 A、B、C、D 和 E 及其依赖项。图片由作者提供。

在上面的 DAG 中,节点 A 表示数据整理步骤,涉及数据清理步骤,其中对提取的数据进行清理和预处理。节点 B 和 C 表示特征工程步骤,其中清理后的数据被独立转换为两个特征。节点 D 涉及合并特征。最后,节点 E 表示模型训练步骤,其中在转换后的数据上训练机器学习模型。

DAG 并不关心任务内部发生什么,而是关心任务的执行顺序。

此外,DAG 还使您能够创建自动化、可扩展的数据工作流,尤其是在分布式系统和云环境中。它们将复杂的数据处理任务分解为更小、独立、可管理的子任务,从而使 DAG 能够并行执行并高效利用资源。这种可扩展性在处理大型数据集和复杂的数据管道时尤为重要,因为它可以实现经济高效的数据处理。

最后,DAG 可以提供任何数据管道的可视化表示,帮助您理解和传达工作流程。与其他团队成员或非技术利益相关者合作时,这种视觉清晰度非常重要。如果您能理解数据流和任务之间的依赖关系,就更容易识别和修复问题、优化资源利用率并就管道改进做出明智的决策。

Python 中的 ETL 和 ELT课程是创建和优化数据管道实践的绝佳资源。
Post Reply