

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在步骤之间传递数据
<a name="build-and-manage-propertyfile"></a>

使用 Amazon Pipelines 构建 SageMaker 管道时，您可能需要将数据从一个步骤传递到下一个步骤。例如，您可能希望将训练步骤生成的模型构件作为模型评测或部署步骤的输入。您可以使用该功能创建相互依赖的管道步骤，并构建您的 ML 工作流程。

当您需要从管道步骤的输出中获取信息时，可以使用 `JsonGet`。`JsonGet` 可以帮助您从 Amazon S3 或属性文件中提取信息。下文将介绍使用 `JsonGet` 提取步进输出的方法。

## 使用 Amazon S3 在不同步骤之间传递数据
<a name="build-and-manage-propertyfile-s3"></a>

您可以在 `ConditionStep` 中使用 `JsonGet`，直接从 Amazon S3 获取 JSON 输出。Amazon S3 URI 可以是包含原始字符串、管道运行变量或管道参数的 `Std:Join` 函数。下面的示例展示了如何在 `ConditionStep` 中使用 `JsonGet`：

```
# Example json file in s3 bucket generated by a processing_step
{
   "Output": [5, 10]
}

cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name="<step-name>",
        s3_uri="<s3-path-to-json>",
        json_path="Output[1]"
    ),
    right=6.0
)
```

如果在条件步骤中使用带有 Amazon S3 路径的 `JsonGet`，则必须在条件步骤和生成 JSON 输出的步骤之间明确添加依赖关系。在下面的示例中，条件步骤的创建依赖于处理步骤：

```
cond_step = ConditionStep(
        name="<step-name>",
        conditions=[cond_lte],
        if_steps=[fail_step],
        else_steps=[register_model_step],
        depends_on=[processing_step],
)
```

## 使用属性文件在各步骤之间传递数据
<a name="build-and-manage-propertyfile-property"></a>

使用属性文件存储处理步骤输出中的信息。这在分析处理步骤的结果以决定如何执行条件步骤时特别有用。该`JsonGet`函数处理属性文件，并允许您使用 JsonPath 符号来查询属性 JSON 文件。有关 JsonPath 符号的更多信息，请参阅 [JsonPath repo](https://github.com/json-path/JsonPath)。

要存储属性文件以备日后使用，必须先创建一个具有以下格式的 `PropertyFile` 实例。`path` 参数是保存属性文件的 JSON 文件的名称。任何 `output_name` 都必须与您在处理步骤中定义的 `ProcessingOutput` 的 `output_name` 相匹配。这使属性文件能够捕获步骤中的 `ProcessingOutput`。

```
from sagemaker.workflow.properties import PropertyFile

<property_file_instance> = PropertyFile(
    name="<property_file_name>",
    output_name="<processingoutput_output_name>",
    path="<path_to_json_file>"
)
```

创建`ProcessingStep`实例时，添加`property_files`参数以列出 Amazon SageMaker Pipelines 服务必须索引的所有参数文件。这将保存属性文件以备日后使用。

```
property_files=[<property_file_instance>]
```

要在条件步骤中使用属性文件，请将 `property_file` 添加到传递给条件步骤的条件中（如以下示例所示），以便使用 `json_path` 参数查询 JSON 文件中的所需属性。

```
cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name=step_eval.name,
        property_file=<property_file_instance>,
        json_path="mse"
    ),
    right=6.0
)
```

有关更深入的示例，请参阅 [Amaz SageMaker on Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable)中的*[属性文件](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#property-file)*。