你可以找到一个如何使用 Dagster 和 Great Expectations 测试数据质量的演示。动态覆盖率测试图有更多的步骤,例如 seed_urls、scrape、parse 等,但为了简单起见,在这个演示中省略了一些操作。然而,它包含了动态覆盖率测试中最重要的部分——数据质量验证。演示图由以下操作组成:
- load_items: 从文件加载数据 谎言数据 并将其加载为 JSON 对象。
- load_structure: 从文件加载数据结构。
- get_flat_items: 使数据平坦化。
- load_dfs:使用来自 load_structure 操作的结构将数据加载为 Spark DataFrames。
- ge_validation:对每个 DataFrame 执行 Great Expectations 验证。
- post_ge_validation:检查 Great Expectations 验证是否通过或失败。
虽然有些操作是不言自明的,但让我们来研究一下可能需要进一步详细说明的一些操作。
生成结构
load_structure 操作本身并不复杂。然而,重要的是结构的类型。它表示为 Spark 模式,因为我们将使用它来将数据加载为 Spark DataFrames,因为 Great Expectations 可以与它们配合使用。Pydantic 模型中的每个嵌套对象都将表 战略视频营销时代 示为单独的 Spark 模式,因为 Great Expectations 不能很好地处理嵌套数据。
例如像这样的 Pydantic 模型:
这将表示为两个 Spark 模式:
该演示已包含 Owler 公司数据的数据、结构和期望。但是,如果您想为自己的数据生成结构(以及您自己的结构),可以按照以下步骤进行操作。运行以下命令生成 Spark 结构的示例:
此命令为 Pydantic 模型生成 Spark 结构并将其保存为 gx_demo/data 目录中的 example_spark_structure.json。
准备和验证数据
加载结构后,我们需要准备数据进行验证。这引出了 get_flat_items 操作,该操作负责展平数据。我们需要展平数据,因为每个嵌套对象都将表示为单独 Spark DataFrame 中的一行。因此,如果我们有一份如下所示的公司列表:
展平后,数据将如下所示:
然后,来自 get_flat_items 操作的扁平化数据将根据我们在 load_dfs 操作中的 load_structure 操作中加载的结构加载到每个 Spark DataFrame 中。
load_dfs 操作使用DynamicOut,它允许我们根据在 load_structure 操作中加载的结构创建动态图。
基本上,我们将为结构中的每个嵌套对象创建一个单独的 Spark DataFrame。Dagster 将创建一个单独的 ge_validation 操作,该操作将对每个 DataFrame 的 Great Expectations 验证进行并行化。并行化不仅因为它可以加快进程,还因为它可以创建一个图形来支持任何类型的数据结构。
因此,如果我们抓取一个新目标,我们可以轻松添加一个新结构,并且图表将能够处理它。
产生期望
演示和结构中也已经生 博目录 成了期望。但是,本节将向您展示如何为您自己的数据生成结构和期望。
如果您要生成具有相同名称的新期望,请确保删除以前生成的期望。要为 的期望。在本例中,我们有 1,000 条 Owler 公司数据记录。其结构为对象列表,其中每个对象代表一家公司。
运行上述命令后,期望套件将在 r 目录中生成。期望套件的数量与数据中的嵌套对象数量相同,在本例中为 13。
每个套件将包含对相应嵌套对象中数据的期望。期望是根据数据的结构和数据本身生成的。请记住,在 Great Expectations 生成包含数据期望的期望套件后,可能需要进行一些手动工作来调整或改进某些期望。