本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 S3 Select 与 Spark 结合使用以提高查询性能
在亚马逊EMR版本 5.17.0 及更高版本中,你可以在亚马逊上使用带有 Spark 的 S3 Selec
S3 Select 支持使用CSVs3selectCSV
和s3selectJSON
值来指定数据格式的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选项,例如
nanValue
、positiveInf
negativeInf
、,以及与损坏的记录相关的选项(例如,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。
Options
使用 s3selectCSV
和 s3selectJSON
时,有以下选项可用。如果未指定,将使用默认值。
使用 s3Select 的选项 CSV
选项 | 默认 | 使用量 |
---|---|---|
|
|
指示是否使用了压缩。 |
|
"," |
指定字段分隔符。 |
|
|
指定引号字符。不支持指定空字符串,这会导致格式XML错误的错误。 |
|
|
指定转义字符。 |
|
|
|
comment |
|
指定注释字符。无法禁用注释标记。换句话说,不支持值 |
|
"" |
使用 s3Select 的选项 JSON
选项 | 默认 | 使用量 |
---|---|---|
|
|
指示是否使用了压缩。 |
|
“false” |
|