

# Ray 脚本编程
<a name="aws-glue-programming-ray"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

AWS Glue 使编写和运行 Ray 脚本变得容易。本节介绍了 AWS Glue for Ray 中支持的 Ray 功能。在 Python 中编写 Ray 脚本

您的自定义脚本必须与作业定义中的 `Runtime` 字段定义的 Ray 版本兼容。有关 Jobs API 中 `Runtime` 的更多信息，请参阅 [作业](aws-glue-api-jobs-job.md)。有关每个运行时环境的信息，请参阅 [支持的 Ray 运行时环境](ray-jobs-section.md#author-job-ray-runtimes)。

**Topics**
+ [教程：在 AWS Glue for Ray 中编写 ETL 脚本](edit-script-ray-intro-tutorial.md)
+ [在 AWS Glue for Ray 中使用 Ray Core 和 Ray Data](edit-script-ray-scripting.md)
+ [为 Ray 作业提供文件和 Python 库](edit-script-ray-env-dependencies.md)
+ [连接 Ray 作业中的数据](edit-script-ray-connections-formats.md)

# 教程：在 AWS Glue for Ray 中编写 ETL 脚本
<a name="edit-script-ray-intro-tutorial"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

Ray 让您能够在 Python 中以原生方式编写和扩展分布式任务。AWS Glue for Ray 提供无服务器 Ray 环境，您可以从作业和交互式会话中访问这些环境（Ray 交互式会话以预览形式提供）。AWS Glue 作业系统提供了一种一致的方式来管理和运行任务，可以按计划、通过触发器或 AWS Glue 控制台执行任务。

结合使用这些 AWS Glue 工具可创建功能强大的工具链，可用于提取、转换、加载（ETL）工作负载，这是 AWS Glue 的一种受欢迎的用例。在本教程中，您将学习组合此解决方案的基础知识。

我们还支持将 for Spark AWS Glue 用于您的 ETL 工作负载。有关编写 AWS Glue for Spark 脚本的教程，请参阅 [教程：编写 AWS Glue for Spark 脚本](aws-glue-programming-intro-tutorial.md)。有关可用引擎的更多信息，请参阅 [AWS Glue for Spark 和 AWS Glue for Ray](how-it-works-engines.md)。Ray 能够处理分析、机器学习（ML）和应用程序开发中的许多不同类型的任务。

在本教程中，您将提取、转换和加载一个托管在 Amazon Simple Storage Service（Amazon S3）中的 CSV 数据集。您将首先使用纽约市出租车和豪华轿车委员会（TLC）行程记录数据集，该数据集存储在一个公开的 Amazon S3 存储桶中。有关该数据集的更多信息，请参阅 [Registry of Open Data on AWS](https://registry.opendata.aws/nyc-tlc-trip-records-pds/)。

您将使用 Ray Data 库中提供的预定义转换来转换数据。Ray Data 是一个由 Ray 设计的数据集准备库，默认包含在 AWS Glue for Ray 环境中。有关默认情况下包含库的更多信息，请参阅 [Ray 作业提供的模块](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)。然后，将转换后的数据写入由您控制的 Amazon S3 存储桶。

**先决条件** - 在本教程中，您需要一个有权访问 AWS Glue 和 Amazon S3 的 AWS 账户。

## 第 1 步：在 Amazon S3 中创建一个存储桶来保存您的输出数据
<a name="edit-script-ray-intro-tutorial-s3"></a>

您需要一个由您控制的 Amazon S3 存储桶，以用作本教程中创建的数据的接收器。您可以按照以下步骤创建此存储桶。

**注意**  
如果您想将数据写入由您控制的现有存储桶，则可以跳过此步骤。记下 *yourBucketName*（现有存储桶的名称），以便在后续步骤中使用。

**为 Ray 作业输出创建存储桶**
+ 按照*《Amazon S3 用户指南》*中[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)中的步骤创建存储桶。
  + 选择存储桶名称时，请记下 *yourBucketName*，您将在后续步骤中参考该名称。
  + 对于其他配置，Amazon S3 控制台中提供的建议设置在本教程中应该可以正常工作。

  例如，Amazon S3 控制台中的存储桶创建对话框可能如下所示。  
![\[Amazon S3 控制台中的一个对话框，用于配置新存储桶。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/ray-tutorial-create-bucket.jpg)

## 第 2 步：为 Ray 作业创建 IAM 角色
<a name="edit-script-ray-intro-tutorial-iam"></a>

您的作业将需要一个具有以下内容的 AWS Identity and Access Management（IAM）角色：
+ `AWSGlueServiceRole` 托管式策略授予的权限。这些是运行 AWS Glue 作业所需的基本权限。
+ 针对 `nyc-tlc/*` Amazon S3 资源的 `Read` 访问级别权限。
+ 针对 `yourBucketName/*` Amazon S3 资源的 `Write` 访问级别权限。
+ 一种允许 `glue.amazonaws.com` 主体担任角色的信任关系。

您可以按照以下步骤创建此角色。

**为您的 AWS Glue for Ray 作业创建 IAM 角色**
**注意**  
您可以按照许多不同的步骤创建 IAM 角色。有关如何预置 IAM 资源的更多信息或选项，请参阅 [AWS Identity and Access Management 文档](https://docs.aws.amazon.com/iam/index.html)。

1. 按照*《IAM 用户指南》*中[使用可视化编辑器创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-visual-editor)中的步骤，创建定义前面概述的 Amazon S3 权限的策略。
   + 选择服务时，请选择 Amazon S3。
   + 为策略选择权限时，请为以下资源（如前所述）附加以下几组操作：
     + 针对 `nyc-tlc/*` Amazon S3 资源的读取访问级别权限。
     + 针对 `yourBucketName/*` Amazon S3 资源的写入访问级别权限。
   + 选择策略名称时，请记下 *YourPolicyName*，您将在后续步骤中参考该名称。

1. 按照*《IAM 用户指南》*中[为 AWS 服务（控制台）创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)中的步骤，为您的 AWS Glue for Ray 作业创建角色。
   + 选择可信 AWS 服务实体，请选择 `Glue`。这将自动填充您的作业所需的信任关系。
   + 为权限策略选择策略时，请附加以下策略：
     + `AWSGlueServiceRole`
     + *YourPolicyName*
   + 选择角色名称时，请记下 *YourRoleName*，您将在后续步骤中参考该名称。

## 第 3 步：创建并运行 AWS Glue for Ray 作业
<a name="edit-script-ray-intro-tutorial-author-job"></a>

在此步骤中，您将使用 AWS 管理控制台 创建 AWS Glue 作业，为其提供示例脚本，然后运行该作业。创建作业时，它会在控制台中创建一个位置供您存储、配置和编辑 Ray 脚本。有关创建任务的信息，请参阅 [在 AWS 控制台中管理 AWS Glue 作业](author-job-glue.md#console-jobs)。

本教程将介绍以下 ETL 场景：您需要从纽约市 TLC行程记录数据集中读取 2022 年 1 月的记录，通过合并现有列中的数据向数据集添加一个新列（`tip_rate`），然后移除某些当前分析无关的列，最后将结果写入 *yourBucketName*。以下 Ray 脚本执行以下步骤：

```
import ray
import pandas
from ray import data

ray.init('auto')

ds = ray.data.read_csv("s3://nyc-tlc/opendata_repo/opendata_webconvert/yellow/yellow_tripdata_2022-01.csv")

# Add the given new column to the dataset and show the sample record after adding a new column
ds = ds.add_column( "tip_rate", lambda df: df["tip_amount"] / df["total_amount"])

# Dropping few columns from the underlying Dataset 
ds = ds.drop_columns(["payment_type", "fare_amount", "extra", "tolls_amount", "improvement_surcharge"])

ds.write_parquet("s3://yourBucketName/ray/tutorial/output/")
```

**创建并运行 AWS Glue for Ray 作业**

1. 在 AWS 管理控制台 中，导航到 AWS Glue 登录页面。

1. 在侧面的导航窗格中，选择 **ETL 作业**。

1. 在**创建作业**中，选择 **Ray 脚本编辑器**，然后选择**创建**，如下图所示。  
![\[AWS Glue 控制台中用于创建 Ray 作业的对话框。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/edit-script-ray-create.png)

1. 将脚本的全文粘贴到**脚本**窗格中，然后替换所有现有文本。

1. 导航到**任务详细信息**，然后将 **IAM 角色**属性设置为 *YourRoleName*。

1. 选择**保存**，然后选择**运行**。

## 第 4 步：检查输出
<a name="edit-script-ray-intro-tutorial-inspect"></a>

运行 AWS Glue 作业后，您应验证输出是否符合此场景的预期。可以使用以下步骤来做到这一点。

**验证您的 Ray 作业是否成功运行**

1. 在作业详细信息页面上，导航到**运行**。

1. 几分钟后，您应该会看到**运行状态**为**成功**的运行。

1. 通过 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 导航到 Amazon S3 控制台，然后检查 *yourBucketName*。您应该会看到写入输出存储桶的文件。

1. 读取 Parquet 文件并验证其内容。您可以用您现有的工具来做到这一点。如果您没有验证 Parquet 文件的流程，则可以在 AWS Glue 控制台中使用 Spark 或 Ray（预览版）通过 AWS Glue 交互式会话完成此操作。

   在交互式会话中，您可以访问 Ray Data、Spark 或 Pandas 库，这些库是默认提供的（取决于您选择的引擎）。要验证文件内容，您可以使用这些库中可用的常用检查方法，例如 `count`、`schema` 和 `show`。有关控制台中交互式会话的更多信息，请参阅 [Using notebooks with AWS Glue Studio and AWS Glue](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html)。

   由于您已确认文件已写入存储桶，因此可以相对肯定地说，如果您的输出有问题，则它们与 IAM 配置无关。使用 *yourRoleName* 配置您的会话以访问相关文件。

如果您看不到预期结果，请查看本指南中的故障排除内容，找出并修复错误的根源。您可以在 [排除 AWS Glue 问题](troubleshooting-glue.md) 章节中找到故障排除的内容。有关与 Ray 作业相关的特定错误，请参阅故障排除章节中的 [对日志中的 AWS Glue for Ray 错误进行故障排除](troubleshooting-ray.md)。

## 后续步骤
<a name="edit-script-ray-intro-tutorial-next"></a>

 现在，您已经看到并执行了使用 AWS Glue for Ray 的端到端的 ETL 过程。您可以使用以下资源来了解 AWS Glue for Ray 提供了哪些工具来大规模转换和解释数据。
+  有关 Ray 任务模型的更多信息，请参阅 [在 AWS Glue for Ray 中使用 Ray Core 和 Ray Data](edit-script-ray-scripting.md)。要获得使用 Ray 任务的更多体验，请按照 Ray Core 文档中的示例进行操作。请参阅 Ray 文档中的 [Ray Core: Ray Tutorials and Examples (2.4.0)](https://docs.ray.io/en/releases-2.4.0/ray-core/examples/overview.html)。
+  有关 AWS Glue for Ray 中可用数据管理库的指南，请参阅 [连接 Ray 作业中的数据](edit-script-ray-connections-formats.md)。要获得使用 Ray Data 转换和写入数据集的更多经验，请按照 Ray Data 文档中的示例进行操作。请参阅 [Ray Data: Examples (2.4.0)](https://docs.ray.io/en/releases-2.4.0/data/examples/index.html)。
+ 有关配置 AWS Glue for Ray 作业的更多信息，请查阅 [在 AWS Glue 中处理 Ray 作业](ray-jobs-section.md)。
+ 有关编写 AWS Glue for Ray 脚本的更多信息，请继续阅读文档的本节。

# 在 AWS Glue for Ray 中使用 Ray Core 和 Ray Data
<a name="edit-script-ray-scripting"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

Ray 是一个框架，用于通过在集群中分配工作来纵向扩展 Python 脚本。您可以使用 Ray 来解决多种问题，因此 Ray 提供了用于优化某些任务的库。在 AWS Glue 中，我们专注于使用 Ray 来转换大型数据集。AWS Glue 为 Ray Data 和 Ray Core 的某些部分提供支持，以简化此任务。

## 什么是 Ray Core？
<a name="edit-script-ray-scripting-core-what"></a>

构建分布式应用程序的第一步是识别和定义可以同时执行的工作。Ray Core 包含 Ray 中用来定义可以同时执行的任务的部分。Ray 提供了参考和快速入门信息，您可以使用这些信息来学习他们提供的工具。有关更多信息，请参阅 [What is Ray Core?](https://docs.ray.io/en/latest/ray-core/walkthrough.html) 以及 [Ray Core Quick Start](https://docs.ray.io/en/latest/ray-overview/getting-started.html#ray-core-quick-start)。有关在 Ray 中有效定义并发任务的更多信息，请参阅 [Tips for first-time users](https://docs.ray.io/en/latest/ray-core/tips-for-first-time.html)。

**Ray 任务和操作者**  
在 AWS Glue for Ray 文档中，我们可能会提及*任务*和*操作者*，它们是 Ray 中的核心概念。  
Ray 使用 Python 函数和类作为分布式计算系统的构建基块。就像 Python 函数和变量在类中使用时变成“方法”和“属性”一样，在 Ray 中使用函数向工作线程发送代码时，函数变成“任务”，类变成“操作者”。您可以通过 `@ray.remote` 注解来识别 Ray 可能使用的函数和类。  
任务和操作者是可配置的，它们具有生命周期，并且在整个生命周期中都会占用计算资源。当您找到问题的根本原因时，会引发错误的代码可以追溯到任务或操作者。因此，当您学习如何配置、监控或调试 AWS Glue for Ray 作业时，可能会出现这些术语。  
要开始学习如何有效地使用任务和操作者来构建分布式应用程序，请参阅 Ray 文档中的 [Key Concepts](https://docs.ray.io/en/latest/ray-core/key-concepts.html)。

## AWS Glue for Ray 中的 Ray Core
<a name="edit-script-ray-scripting-core-glue"></a>

AWS Glue for Ray 环境管理集群的形成和扩展，以及收集和可视化日志。由于我们管理这些问题，因此我们限制了对 Ray Core 中用于解决开源集群中这些问题的 API 的访问和支持。

在托管式 `Ray2.4` 运行时环境中，我们不支持：
+ [Ray Core CLI](https://docs.ray.io/en/releases-2.4.0/ray-core/api/cli.html)
+ [Ray State CLI](https://docs.ray.io/en/releases-2.4.0/ray-observability/api/state/cli.html)
+ `ray.util.metrics` Prometheus 指标实用方法：
  + [计数器](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Counter.html)
  + [计量表](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Gauge.html)
  + [直方图](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.metrics.Histogram.html)
+ 其他调试工具：
  + [ray.util.pdb.set\$1trace](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.pdb.set_trace.html)
  + [ray.util.inspect\$1serializability](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.util.inspect_serializability.html)
  + [ray.timeline](https://docs.ray.io/en/releases-2.4.0/ray-core/api/doc/ray.timeline.html)

## 什么是 Ray Data？
<a name="edit-script-ray-scripting-data-what"></a>

当您连接到数据来源和目标、处理数据集和启动常见转换时，Ray Data 是一种使用 Ray 来解决 Ray 数据集转换问题的简单方法。有关使用 Ray Data 的更多信息，请参见 [Ray 数据集：分布式数据预处理](https://docs.ray.io/en/releases-2.4.0/data/dataset.html)。

您可以使用 Ray Data 或其他工具来访问您的数据。有关在 Ray 中访问数据的更多信息，请参阅 [连接 Ray 作业中的数据](edit-script-ray-connections-formats.md)。

## AWS Glue for Ray 中的 Ray Data
<a name="edit-script-ray-scripting-data-glue"></a>

默认情况下，托管式 `Ray2.4` 运行时环境支持和提供 Ray Data。有关提供的模块的更多信息，请参阅 [Ray 作业提供的模块](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)。

# 为 Ray 作业提供文件和 Python 库
<a name="edit-script-ray-env-dependencies"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

本节提供了在 AWS Glue Ray 作业中使用 Python 库所需的信息。您可以使用所有 Ray 作业中默认包含的某些公共库。也可以为 Ray 作业提供您自己的 Python 库。

## Ray 作业提供的模块
<a name="edit-script-ray-modules-provided"></a>

您可以使用以下提供的包在 Ray 作业中执行数据集成工作流程。默认情况下，这些包在 Ray 作业中可用。

------
#### [ AWS Glue version 4.0 ]

在 AWS Glue 4.0 中，Ray（`Ray2.4` 运行时系统）环境提供以下软件包：
+ boto3 == 1.26.133
+ ray == 2.4.0
+ pyarrow == 11.0.0
+ pandas==1.5.3
+ numpy == 1.24.3
+ fsspec == 2023.4.0

此列表包括所有将与 `ray[data] == 2.4.0` 一起安装的软件包。开箱即用支持 Ray Data。

------

## 为您的 Ray 作业提供文件
<a name="edit-script-ray-working-directory"></a>

您可以使用 `--working-dir` 参数为 Ray 作业提供文件。为此参数提供指向 Amazon S3 上托管的.zip 文件的路径。在 .zip 文件中，您的文件必须包含在单个顶级目录中。任何其他文件都不应位于顶层。

在脚本开始运行之前，您的文件将分发到每个 Ray 节点。考虑一下这会如何影响每个 Ray 节点的可用磁盘空间。可用磁盘空间由作业配置中设置的 WorkerType 决定。如果您想大规模提供作业数据，那么这种机制不是合适的解决方案。有关为作业系统数据的更多信息，请参阅 [连接 Ray 作业中的数据](edit-script-ray-connections-formats.md)。

可以访问您的文件，就像通过 `working_dir` 参数向 Ray 提供目录一样。例如，要读取 .zip 文件顶级目录中名为 `sample.txt` 的文件，可以调用：

```
@ray.remote
def do_work():
    f = open("sample.txt", "r")
    print(f.read())
```

有关 `working_dir` 的详细信息，请参阅 [Ray 文档](https://docs.ray.io/en/latest/ray-core/handling-dependencies.html#remote-uris)。此功能的行为与 Ray 的原生功能类似。

## 用于 Ray 作业的其他 Python 模块
<a name="edit-script-ray-python-libraries-additional"></a>

**来自 PyPI 的其他模块**

Ray 作业使用 Python Package Installer (pip3) 安装 Ray 脚本使用的其他模块。您可以将 `--pip-install` 参数与逗号分隔的 Python 模块列表结合使用，以添加新模块或更改现有模块的版本。

例如，要更新或添加新的 `scikit-learn` 模块，请使用以下键-值对：

`"--pip-install", "scikit-learn==0.21.3"`

如果您有自定义模块或自定义补丁，则可以使用 `--s3-py-modules` 参数从 Amazon S3 分发自己的库。在上传发行版之前，您的发行版可能需要重新打包和重新构建。遵循 [在 Ray 作业中包含 Python 代码](#edit-script-ray-packaging) 中的准则。

**来自 Amazon S3 的自定义分配**

自定义发行版应符合 Ray 依赖项打包要求。您可以在下一节中了解如何构建这些发行版。有关 Ray 如何设置依赖项的更多信息，请参阅 Ray 文档中的 [Environment Dependencies](https://docs.ray.io/en/latest/ray-core/handling-dependencies.html)（环境依赖项）。

要在评估其内容后添加自定义可分发文件，请将您的可分发文件上传到作业的 IAM 角色可用的存储桶。在参数配置中指定 Python ZIP 存档的 Amazon S3 路径。如果您要提供多个可分发文件，请用逗号分隔它们。例如：

`"--s3-py-modules", "s3://s3bucket/pythonPackage.zip"` 

**限制**

Ray 作业不支持在作业环境中编译本机代码。如果您的 Python 依赖项在传递期间依赖于本机编译的代码，则可能会受到此限制。Ray 作业可以运行提供的二进制文件，但必须已针对基于 ARM64 的 Linux 进行编译。这意味着您可以使用 `aarch64``manylinux` 仪表盘里的内容。通过将轮子重新打包到 Ray 标准，您可以以编译后的形式提供原生依赖项。通常这意味着删除 `dist-info` 文件夹，从而使存档的根目录中只有一个文件夹。

您无法使用此参数升级 `ray` 或 `ray[data]` 的版本。要使用新版本的 Ray，您需要在我们发布对作业的支持后更改运行时字段。有关支持的 Ray 版本的更多信息，请参阅 [AWS Glue 版本](release-notes.md#release-notes-versions)。

## 在 Ray 作业中包含 Python 代码
<a name="edit-script-ray-packaging"></a>

Python 软件基金会为打包 Python 文件以供在不同的运行时使用提供了标准化的行为。请注意，Ray 引入了打包标准的限制。除对 Ray 规定打包标准外，AWS Glue 未指定其他打包标准。以下说明提供了有关打包简单 Python 包的标准指导。

将您的文件打包为 `.zip` 存档。目录应位于存档的根目录处。**存档的根级别上应该没有其他文件，否则，这可能会导致意外行为。**根目录是软件包，其名称用于在导入时引用您的 Python 代码。

如果您使用 `--s3-py-modules` 将这种形式的分配提供给 Ray 作业，则应该能够在 Ray 脚本中从软件包中导入 Python 代码。

您的软件包可以为单个 Python 模块提供一些 Python 文件，也可以将许多模块打包在一起。重新打包依赖关系（例如 PyPI 中的库）时，请**检查这些软件包中是否有隐藏文件和元数据目录**。

**警告**  
 某些操作系统行为使得正确遵循这些打包说明变得困难。  
OSX 可能会将隐藏文件（例如 `__MACOSX` 添加到顶层的 Zip 文件文件中）。
Windows 可能会自动将您的文件添加到 Zip 内的文件夹，从而无意中创建了一个嵌套文件夹。

以下过程假设您正在 Amazon Linux 2 或提供 Info-ZIP `zip` 分发版和 `zipinfo` 实用程序的类似操作系统中与文件进行交互。我们建议使用这些工具来防止意外行为。

打包 Python 文件以在 Ray 中使用

1. 使用您的软件包名称创建一个临时目录，然后确认您的工作目录是其父目录。您可使用以下命令执行此操作：

   ```
   cd parent_directory
   mkdir temp_dir
   ```

1. 将您的文件复制到临时目录中，然后确认您的目录结构。该目录的内容将作为您的 Python 模块直接访问。您可使用以下 命令执行此操作：

   ```
   ls -AR temp_dir
   # my_file_1.py
   # my_file_2.py
   ```

1. 使用 Zip 压缩您的临时文件夹。您可使用以下命令执行此操作：

   ```
   zip -r zip_file.zip temp_dir
   ```

1. 确认您的文件已正确打包。`zip_file.zip` 现在应该可以在您的工作目录中找到。您可以使用以下命令检查：

   ```
   zipinfo -1 zip_file.zip
   # temp_dir/
   # temp_dir/my_file_1.py
   # temp_dir/my_file_2.py
   ```

重新打包一个 Python 软件包以便在 Ray 中使用。

1. 使用您的软件包名称创建一个临时目录，然后确认您的工作目录是其父目录。您可使用以下命令执行此操作：

   ```
   cd parent_directory
   mkdir temp_dir
   ```

1. 解压缩您的软件包并将内容复制到您的临时目录中。移除与之前的打包标准相关的文件，只保留模块的内容。使用以下命令确认您的文件结构看起来正确：

   ```
   ls -AR temp_dir
   # my_module
   # my_module/__init__.py
   # my_module/my_file_1.py
   # my_module/my_submodule/__init__.py
   # my_module/my_submodule/my_file_2.py
   # my_module/my_submodule/my_file_3.py
   ```

1. 使用 Zip 压缩您的临时文件夹。您可使用以下命令执行此操作：

   ```
   zip -r zip_file.zip temp_dir
   ```

1. 确认您的文件已正确打包。`zip_file.zip` 现在应该可以在您的工作目录中找到。您可以使用以下命令检查：

   ```
   zipinfo -1 zip_file.zip
   # temp_dir/my_module/
   # temp_dir/my_module/__init__.py
   # temp_dir/my_module/my_file_1.py
   # temp_dir/my_module/my_submodule/
   # temp_dir/my_module/my_submodule/__init__.py
   # temp_dir/my_module/my_submodule/my_file_2.py
   # temp_dir/my_module/my_submodule/my_file_3.py
   ```

# 连接 Ray 作业中的数据
<a name="edit-script-ray-connections-formats"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

AWS Glue Ray 作业可以使用各种 Python 包，这些包专为快速集成数据而设计。我们提供了一组最少的依赖关系，以免您的环境混乱。有关默认情况下包含内容的更多信息，请参阅 [Ray 作业提供的模块](edit-script-ray-env-dependencies.md#edit-script-ray-modules-provided)。

**注意**  
AWS Glue 提取、转换、加载（ETL）提供 DynamicFrame 抽象化来简化 ETL 工作流程，在这些工作流程中，您可以解决数据集各行之间的架构差异。AWS GlueETL 还提供其他功能，例如作业书签和分组输入文件。我们目前不在 Ray 作业中提供相应的功能。  
AWS Glue for Spark 直接支持连接到某些数据格式、源和接收器。在 Ray 中，适用于 Pandas 的 AWS 开发工具包和最新的第三方库在很大程度上满足了这一需求。您需要查阅这些库，以了解有哪些功能可用。

AWS Glue for Ray 目前无法与 Amazon VPC 集成。如果没有公共路由，就无法访问 Amazon VPC 中的资源。有关将 AWS Glue 与 Amazon VPC 结合使用的更多信息，请参阅 [为 AWS Glue（AWS PrivateLink）配置接口 VPC 端点（AWS PrivateLink）](vpc-interface-endpoints.md)。

## 在 Ray 中处理数据的常用库
<a name="edit-script-ray-etl-libraries"></a>

**Ray Data** – Ray Data 提供了处理常见数据格式、源和接收器的方法。有关 Ray Data 中支持的格式和源的更多信息，请参阅 Ray Data 文档中的 [Input/Output](https://docs.ray.io/en/latest/data/api/input_output.html)。Ray Data 是一个坚持己见的库，而不是一个用于处理数据集的通用库。

Ray 围绕 Ray Data 可能是您工作的最佳解决方案的用例提供了某些指导。有关更多信息，请参阅 Ray 文档中的 [Ray use cases](https://docs.ray.io/en/latest/ray-overview/use-cases.html)。

**适用于 Pandas 的 AWS 开发工具包（awswrangler）** – 适用于 Pandas 的 AWS 开发工具包是一款 AWS 产品，当您使用 pandas DataFrames 进行转换管理数据时，该产品提供经过测试的简洁解决方案，用于读取和写入 AWS 服务。有关适用于 Pandas 的 AWS 开发工具包中支持的格式和来源的更多信息，请参阅AWS适用于 Pandas 的开发工具包文档中的 [API Reference](https://aws-sdk-pandas.readthedocs.io/en/stable/api.html)。

有关如何使用适用于 Pandas 的 AWS 开发工具包读取和写入数据的示例，请参阅适用于 Pandas 的 AWS 开发工具包文档中的 [Quick Start](https://aws-sdk-pandas.readthedocs.io/en/stable/)。适用于 Pandas 的 AWS 开发工具包不为您的数据提供转换。它仅支持从源读取和写入。

**Modin** – Modin 是一个 Python 库，它以可分发的方式实现了常见的 Pandas 操作。有关 Modin 的更多信息，请参阅 [Modin 文档](https://modin.readthedocs.io/en/stable/)。Modin 本身不提供从源读取和写入的支持。它提供常见转换的分布式实现。适用于 Pandas 的 AWS 开发工具包支持 Modin。

当您在 Ray 环境中同时运行 Modin 和适用于 Pandas 的 AWS 开发工具包时，您可以执行常见的 ETL 任务并获得高性能结果。有关将 Modin 与适用于 Pandas 的 AWS 开发工具包一起使用的更多信息，请参阅适用于 Pandas 的 AWS 开发工具包文档中的 [At scale](https://aws-sdk-pandas.readthedocs.io/en/stable/scale.html)。

**其他框架** - 有关 Ray 支持的框架的更多信息，请参阅 Ray 文档中的 [The Ray Ecosystem](https://docs.ray.io/en/latest/ray-overview/ray-libraries.html)。我们不为 AWS Glue for Ray 中的其他框架提供支持。

## 通过 Data Catalog 连接
<a name="edit-script-ray-gludc"></a>

适用于 Pandas 的 AWS 开发工具包支持通过 Data Catalog 与 Ray 作业一起管理数据。有关更多信息，请参阅适用于 Pandas 的 AWS 开发工具包网站上的 [Glue 目录](https://aws-sdk-pandas.readthedocs.io/en/3.0.0rc2/tutorials/005%20-%20Glue%20Catalog.html)。