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

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

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

重要

新規のお客様への Amazon S3 Select の提供は終了しました。Amazon S3 Select をご利用の既存のお客様は、今後も通常どおり使用できます。詳細はこちら

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

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

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

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

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

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

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

考慮事項と制約事項

  • お客様が提供する暗号化キー (SSE-C) による Amazon S3 サーバー側の暗号化とクライアント側の暗号化はサポートされていません。

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

  • UTF-8 形式の JSON CSVおよび ファイルのみがサポートされています。マルチラインCSVsはサポートされていません。

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

  • Spark CSVやnanValue、破損したレコードに関連する positiveInfnegativeInf、、 JSONなどのオプション (フェイルファストモードやドロップマフォームモードなど) はサポートされていません。

  • 小数でのカンマ (,) の使用はサポートされません。たとえば、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 を指定する

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

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"

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

delimiter

","

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

quote

'\"'

引用文字を指定します。空の文字列の指定はサポートされておらず、不正な形式のXMLエラーが発生します。

escape

'\\'

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

header

"false"

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

コメント

"#"

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

nullValue

""

S3selectJSON のオプション

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

compression

"none"

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

multiline

"false"

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