

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

# PySpark 分析模板
<a name="pyspark-analysis-templates"></a>

PySpark 分析模板需要 Python 用户脚本和可选的虚拟环境才能使用自定义和开源库。这些文件称为工件。

在创建分析模板之前，您需要先创建项目，然后将项目存储在 Amazon S3 存储桶中。 AWS Clean Rooms 在运行分析作业时使用这些工件。 AWS Clean Rooms 仅在运行作业时访问工件。

在 PySpark 分析模板上运行任何代码之前，请通过以下方式 AWS Clean Rooms 验证构件：
+ 检查创建模板时使用的特定 S3 对象版本
+ 验证工件的 SHA-256 哈希值 
+ 任何修改或移除工件的任务都失败了

**注意**  
中给定 PySpark 分析模板的所有组合工件的最大大小 AWS Clean Rooms 为 1 GB。

## PySpark 分析模板的安全性
<a name="pyspark-analysis-templates-security"></a>

为了保护安全的计算环境， AWS Clean Rooms 使用两层计算架构将用户代码与系统操作隔离开来。该架构基于 Amazon EMR Serverless 细粒度访问控制技术，也称为薄膜。有关更多信息，请参阅[膜——在存在命令式代码的情况下，Apache Spark 中的安全和高性能数据访问控制](https://www.amazon.science/publications/membrane-safe-and-performant-data-access-controls-in-apache-spark-in-the-presence-of-imperative-code)。

计算环境组件分为单独的用户空间和系统空间。用户空间执行 PySpark 分析模板中的 PySpark 代码。 AWS Clean Rooms 使用系统空间使作业能够运行，包括使用客户提供的服务角色读取数据以运行作业，以及实现列允许名单。由于这种架构，影响系统空间的客户 PySpark 代码（可能包括少量 Spark SQL 和 PySpark DataFrames APIs）会被阻止。

## PySpark 的局限性 AWS Clean Rooms
<a name="pyspark-limitations"></a>

当客户提交经批准的 PySpark 分析模板时， AWS Clean Rooms 将在自己的安全计算环境中运行该模板，任何客户都无法访问。计算环境实现具有用户空间和系统空间的计算架构，以保护安全的计算环境。有关更多信息，请参阅 [PySpark 分析模板的安全性](#pyspark-analysis-templates-security)。

在中使用 PySpark 之前，请考虑以下限制 AWS Clean Rooms。

**限制**
+ 仅支持 DataFrame 输出
+ 每次任务执行一次 Spark 会话

**不支持的功能**
+ **数据管理**
  + 冰山表格式
  + LakeFormation 托管表
  + 弹性分布式数据集（RDD）
  + Spark 流
  + 嵌套列的访问控制
+ **自定义函数和扩展**
  + 用户定义的表函数 (UDTFs)
  + Hive UDFs
  + 用户定义函数中的自定义类
  + 自定义数据来源
  + 其他 JAR 文件用于：
    + Spark 扩展
    + 连接器
    + 元数据仓配置
+ **监测和分析**
  + 火花日志
  + 火花用户界面
  + `ANALYZE TABLE` 命令

**重要**  
设置这些限制是为了保持用户和系统空间之间的安全隔离。  
无论协作配置如何，所有限制都适用。  
未来的更新可能会根据安全评估增加对其他功能的支持。

## 最佳实践
<a name="python-best-practices"></a>

在创建 PySpark 分析模板时，我们建议采用以下最佳实践。
+ 在设计分析模板时要[PySpark 的局限性 AWS Clean Rooms](#pyspark-limitations)牢记这一点。
+ 请先在开发环境中测试您的代码。
+ 仅使用支持的 DataFrame 操作。
+ 规划您的输出结构，使其 DataFrame 不受限制地使用。

我们推荐以下管理构件的最佳实践
+ 将所有 PySpark 分析模板项目保存在专用的 S3 存储桶或前缀中。
+ 对不同的构件版本使用清晰的版本命名。
+ 需要更新对象时创建新的分析模板。
+ 维护一份清单，列出哪些模板使用哪些构件版本。

有关如何编写 Spark 代码的更多信息，请参阅以下内容：
+ [Apache 火花示例](https://spark.apache.org/examples.html)
+ 在《*亚马逊 EMR* [发布指南》中编写 Spark 应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-application.html)
+ [教程：在*AWS Glue 用户指南*中 AWS Glue 编写 for Spark 脚本](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-intro-tutorial.html)

以下主题说明了如何在创建和查看分析模板之前创建 Python 用户脚本和库。

**Topics**
+ [PySpark 分析模板的安全性](#pyspark-analysis-templates-security)
+ [PySpark 的局限性 AWS Clean Rooms](#pyspark-limitations)
+ [最佳实践](#python-best-practices)
+ [创建用户脚本](create-user-script.md)
+ [使用 PySpark 分析模板中的参数](pyspark-parameter-handling.md)
+ [创建虚拟环境（可选）](create-virtual-environment.md)
+ [在 S3 中存储用户脚本和虚拟环境](store-artifacts-in-s3.md)
+ [创建 PySpark 分析模板](create-pyspark-analysis-template.md)
+ [查看 PySpark 分析模板](review-pyspark-analysis-template.md)