S3 Select と Spark を使用してクエリパフォーマンスを向上させる - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

S3 Select と Spark を使用してクエリパフォーマンスを向上させる

Amazon EMR リリースバージョン 5.17.0 以降では、S3 SelectアマゾンEMRでSparkとな S3 Select では、アプリケーションはオブジェクトに含まれるデータのサブセットのみを取得できます。Amazon EMR では、大量のデータセットをフィルタリングして処理する計算作業をクラスターから Amazon S3 に「プッシュダウン」することにより、一部のアプリケーションのパフォーマンスを向上させることができ、Amazon EMR と Amazon S3 間で転送されるデータの量が削減されます。

S3 Select は、s3selectCSV および s3selectJSON 値を使用してデータ形式を指定する CSV ファイルと JSON ファイルでサポートされます。詳細な説明と例については、「コードで S3 Select を指定します。」を参照してください。

S3 Select がアプリケーションに適しているかどうかを確認する

S3 Select が使用するアプリケーションに適しているかどうかを確認するために、S3 Select を使用した場合と使用しない場合のアプリケーションのベンチマークを行うことをお勧めします。

アプリケーションが S3 Select を使用する候補となるかどうかを判断するには、次のガイドラインを使用します。

  • クエリは元のデータセットの半分以上を除外する。

  • Amazon S3 と Amazon EMR クラスター間のネットワーク接続は、良好な転送速度と使用可能な帯域幅を備えています。Amazon S3 は HTTP 応答を圧縮しないため、圧縮された入力ファイルの応答サイズが増加する可能性があります。

考慮事項と制約事項

  • お客様が用意した暗号化キーを使用した Amazon S3 サーバー側の暗号化 (SSE-C) とクライアント側の暗号化はサポートされていません。

  • AllowQuotedRecordDelimiters プロパティはサポートされていません。このプロパティを指定した場合、クエリは失敗します。

  • UTF-8 形式の CSV ファイルと JSON ファイルのみがサポートされています。複数行の CSV はサポートされません。

  • 圧縮されていないファイルか gzip ファイルのみがサポートされます。

  • nanValuepositiveInfnegativeInf などの Spark CSV と JSON のオプションや破損した記録に関連するオプション (failfast および dropmalformed モードなど) はサポートされません。

  • 小数でのカンマ (,) の使用はサポートされません。たとえば、10,000 はサポートされませんが、10000 はサポートされます。

  • 最後の行のコメント文字はサポートされていません。

  • ファイルの末尾にある空の行は処理されません。

  • 次のフィルターは Amazon S3 にプッシュダウンされません。

    • COUNT()SUM() などの集計関数。

    • 属性を CAST() するフィルター。例えば、CAST(stringColumn as INT) = 1

    • オブジェクトの属性、または複雑な属性を持つフィルター。例えば、intArray[1] = 1, objectColumn.objectNumber = 1

    • 値がリテラル値ではないフィルター。例えば、intColumn1 = intColumn2 です。

    • のみS3 サポートされているデータ型の選択は、文書化された制限付きでサポートされています。

コードで S3 Select を指定します。

次の例では、Scala、SQL、R、および PySpark を使用して CSV 用の S3 Select を指定する方法を示します。JSON 用の S3 Select も同じ方法で使用できます。オプション、デフォルト値、および制限の一覧については、「Options」を参照してください。

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")

Options

s3selectCSVs3selectJSON を使用するときは、以下のオプションを利用できます。指定しない場合はデフォルト値が使用されます。

S3selectCSV のオプション

オプション デフォルト 使用

compression

"none"

圧縮が使用されているかどうかを示します。"none" 以外にサポートされる設定は "gzip" のみです。

delimiter

","

フィールドの区切り記号を指定します。

quote

'\"'

引用文字を指定します。空の文字例は指定できず、文字列を空にすると XML が不正というエラーが表示されます。

escape

'\\'

エスケープ文字を指定します。

header

"false"

"false" はヘッダーがないことを指定します。"true" はヘッダーが最初の行にあることを指定します。最初の行のヘッダーのみがサポートされ、ヘッダーの前の空の行はサポートされません。

コメント

"#"

コメント文字を指定します。コメントインジケーターを無効にすることはできません。つまり、\u0000 という値はサポートされません。

nullValue

""

S3selectJSON のオプション

オプション デフォルト 使用

compression

"none"

圧縮が使用されているかどうかを示します。"none" 以外にサポートされる設定は "gzip" のみです。

multiline

"false"

"false" は JSON が S3 Select LINES 形式であることを指定し、入力データの各行に 1 つの JSON オブジェクトが含まれていることを意味します。"true" は JSON が S3 Select DOCUMENT 形式であることを指定し、入力データの複数の行に JSON オブジェクトをまたがらせられることを意味します。