将 S3 Select 与 Spark 结合使用以提高查询性能 - Amazon EMR

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

将 S3 Select 与 Spark 结合使用以提高查询性能

在亚马逊EMR版本 5.17.0 及更高版本中,你可以在亚马逊上使用带有 Spark 的 S3 Selec t。EMRS3 Select 可让应用程序仅从对象检索数据子集。对于亚马逊来说EMR,筛选大型数据集进行处理的计算工作从集群 “下推” 到Amazon S3,这可以提高某些应用程序的性能并减少亚马逊EMR和Amazon S3之间传输的数据量。

S3 Select 支持使用CSVs3selectCSVs3selectJSON值来指定数据格式的JSON文件。有关更多信息以及示例,请参阅 在代码中指定 S3 Select

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选项,例如nanValuepositiveInfnegativeInf、,以及与损坏的记录相关的选项(例如,failfast 和 dropformalform 模式)。

  • 不支持在十进制数中使用逗号 (,)。例如,不支持 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

以下示例演示如何指定 S3 Selec CSV t 以使用 Scala SQL、、R 和。 PySpark您可以用同样的方式将 S3 S JSON elect 用于。有关选项、默认值和限制的列表,请参阅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 时,有以下选项可用。如果未指定,将使用默认值。

使用 s3Select 的选项 CSV

选项 默认 使用量

compression

"none"

指示是否使用了压缩。"gzip" 是除 "none" 之外唯一受支持的设置。

delimiter

","

指定字段分隔符。

quote

'\"'

指定引号字符。不支持指定空字符串,这会导致格式XML错误的错误。

escape

'\\'

指定转义字符。

header

"false"

"false" 指定不存在标头。"true" 指定第一行中存在标头。仅支持第一行中的标头,不支持标头前面的空行。

comment

"#"

指定注释字符。无法禁用注释标记。换句话说,不支持值 \u0000

nullValue

""

使用 s3Select 的选项 JSON

选项 默认 使用量

compression

"none"

指示是否使用了压缩。"gzip" 是除 "none" 之外唯一受支持的设置。

multiline

“false”

"false"指定 JSON is 采用 S3 Selec LINES t 格式,这意味着输入数据中的每一行都包含一个JSON对象。 "true"指定采JSON用 S3 Select DOCUMENT 格式,这意味着JSON对象可以在输入数据中跨越多行。