使用 S3 Select 搭配 Spark 以提升查詢效能 - Amazon EMR

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

使用 S3 Select 搭配 Spark 以提升查詢效能

重要

Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續如常使用此功能。進一步了解

在 Amazon 5.17.0 版及更新EMR版本中,您可以在 Amazon EMR 上使用 S3 Select 搭配 Spark。S3 Select 可讓應用程式從物件只擷取資料子集。對於 Amazon EMR ,篩選用於處理的大型資料集的運算工作是從叢集縮減到 Amazon S3,這可以改善某些應用程式的效能,並減少 Amazon EMR和 Amazon S3 之間傳輸的資料量。

S3 Select 支援使用 CSV和 JSON 檔案,使用 s3selectCSVs3selectJSON值來指定資料格式。如需詳細資訊和範例,請參閱 在您的程式碼中指定 S3 Select

S3 Select 是否適合我的應用程式?

建議您在使用和不使用 S3 Select 的狀態下,對應用程式進行基準分析,以確認其是否適合您的應用程式。

利用下列的準則,來判斷您的應用程式是否可能使用 S3 Select:

  • 您的查詢會篩選掉原始資料集一半以上的資料。

  • Amazon S3 與 Amazon EMR叢集之間的網路連線具有良好的傳輸速度和可用的頻寬。Amazon S3 不會壓縮HTTP回應,因此壓縮輸入檔案的回應大小可能會增加。

考量與限制

  • 不支援使用客戶提供加密金鑰 (SSE-C) 和用戶端加密的 Amazon S3 伺服器端加密。

  • 不支援 AllowQuotedRecordDelimiters 屬性。如果指定此屬性,查詢會失敗。

  • 僅支援 CSV和 UTF-8 格式JSON的檔案。CSVs 不支援多行。

  • 僅支援未壓縮的檔案或 gzip 檔案。

  • 不支援 Spark CSV和JSON選項,例如 nanValuenegativeInfpositiveInf和與損毀記錄相關的選項 (例如,Failfast 和 Dropmalformed 模式)。

  • 不支援在十進位使用逗號 (,)。例如,不支援 10,000 但支援 10000

  • 不支援在最後一行的註解字元。

  • 不會處理檔案尾端的空白行。

  • 以下篩選條件不會下推至 Amazon S3:

    • 彙總函數,例如 COUNT()SUM()

    • CAST() 屬性的篩選條件。例如:CAST(stringColumn as INT) = 1

    • 含屬性的篩選條件為物件或很複雜。例如:intArray[1] = 1, objectColumn.objectNumber = 1

    • 篩選條件的值不是常值。例如 intColumn1 = intColumn2

    • 僅在載明限制的情況下支援 S3 Select 支援的資料類型

在您的程式碼中指定 S3 Select

下列範例示範如何使用 CSV Scala、、SQLR 和 指定 S3 Select PySpark。您可以用JSON相同的方式使用 的 S3 Select。如需了解選項清單、其預設值和限制,請參閱 選項

PySpark
spark .read .format("s3selectCSV") // "s3selectJson" for Json .schema(...) // optional, but recommended .options(...) // optional .load("s3://path/to/my/datafiles")
R
read.df("s3://path/to/my/datafiles", "s3selectCSV", schema, header = "true", delimiter = "\t")
Scala
spark .read .format("s3selectCSV") // "s3selectJson" for Json .schema(...) // optional, but recommended .options(...) // optional. Examples: // .options(Map("quote" -> "\'", "header" -> "true")) or // .option("quote", "\'").option("header", "true") .load("s3://path/to/my/datafiles")
SQL
CREATE TEMPORARY VIEW MyView (number INT, name STRING) USING s3selectCSV OPTIONS (path "s3://path/to/my/datafiles", header "true", delimiter "\t")

選項

使用 s3selectCSVs3selectJSON 時,有以下可用選項。若未指定,則會使用預設值。

具有 S3selectCSV 的選項

選項 預設 用量

compression

"none"

指出是否使用了壓縮。"gzip" 是除了 "none" 之外唯一支援的設定。

delimiter

","

指定欄位分隔符號。

quote

'\"'

指定引號字元。不支援指定空字串,並導致格式錯誤XML。

escape

'\\'

指定逸出字元。

header

"false"

"false" 指定沒有標頭。"true" 指定標頭位於第一行。僅支援標頭位於第一行,不支援在標頭前有空白行。

comment

"#"

指定註解字元。註解指標無法停用。換言之,不支援 \u0000 的值。

nullValue

""

具有 S3selectJSON 的選項

選項 預設 用量

compression

"none"

指出是否使用了壓縮。"gzip" 是除了 "none" 之外唯一支援的設定。

multiline

"false"

"false" 指定 JSON 為 S3 Select LINES 格式,表示輸入資料中的每一行都包含單一JSON物件。 "true"指定 JSON 為 S3 Select DOCUMENT 格式,表示JSON物件可以跨越輸入資料中的多行。