

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 Fine Grained Access Control 技術為基礎，也稱為 Membrane。如需詳細資訊，請參閱[在具有必要程式碼的情況下，在 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 工作階段

**不支援的功能**
+ **資料管理**
  + Iceberg 資料表格式
  + LakeFormation 受管資料表
  + 彈性分散式資料集 (RDD)
  + Spark 串流
  + 巢狀資料欄的存取控制
+ **自訂函數和擴充功能**
  + 使用者定義的資料表函數 UDTFs)
  + HiveUDFs
  + 使用者定義函數中的自訂類別
  + 自訂資料來源
  + 適用於以下項目的其他 JAR 檔案：
    + Spark 延伸模組
    + 連接器
    + 中繼存放區組態
+ **監控和分析**
  + Spark 記錄
  + Spark 使用者介面
  + `ANALYZE TABLE` 命令

**重要**  
這些限制適用於維持使用者和系統空間之間的安全隔離。  
無論協同合作組態為何，都適用所有限制。  
未來的更新可能會根據安全性評估新增對其他功能的支援。

## 最佳實務
<a name="python-best-practices"></a>

我們建議在建立 PySpark 分析範本時採用下列最佳實務。
+ [中的 PySpark 限制 AWS Clean Rooms](#pyspark-limitations) 以 為考量來設計您的分析範本。
+ 首先在開發環境中測試您的程式碼。
+ 僅使用支援的 DataFrame 操作。
+ 規劃您的輸出結構以使用 DataFrame 限制。

我們建議您使用下列最佳實務來管理成品
+ 將所有 PySpark 分析範本成品保留在專用 S3 儲存貯體或字首中。
+ 針對不同的成品版本使用透明版本命名。
+ 需要成品更新時建立新的分析範本。
+ 維護哪些範本使用哪些成品版本的庫存。

如需如何撰寫 Spark 程式碼的詳細資訊，請參閱下列內容：
+ [Apache Spark 範例](https://spark.apache.org/examples.html)
+ 在 *Amazon EMR 版本指南*中[撰寫 Spark 應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-application.html) 
+ [使用者指南中的教學課程：撰寫 AWS Glue 適用於 Spark 的 指令碼](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-intro-tutorial.html) *AWS Glue *

下列主題說明如何在建立和檢閱分析範本之前建立 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)