Uso de S3 Select con Spark para mejorar el rendimiento de las consultas - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de S3 Select con Spark para mejorar el rendimiento de las consultas

importante

Amazon S3 Select ya no está disponible para los nuevos clientes. Los clientes actuales de Amazon S3 Select pueden seguir utilizando la característica de la forma habitual. Más información

Con la EMR versión 5.17.0 y posteriores de Amazon, puedes usar S3 Select con Spark en Amazon. EMR S3 Select permite que las aplicaciones recuperen únicamente un subconjunto de datos de un objeto. Para AmazonEMR, el trabajo computacional de filtrar grandes conjuntos de datos para su procesamiento se «transfiere» del clúster a Amazon S3, lo que puede mejorar el rendimiento de algunas aplicaciones y reducir la cantidad de datos transferidos entre Amazon EMR y Amazon S3.

S3 Select es compatible con el uso de JSON archivos CSV s3selectCSV y s3selectJSON valores para especificar el formato de los datos. Para obtener más información y ejemplos, consulte Especificación de S3 Select en el código.

¿S3 Select es adecuado para mi aplicación?

Le recomendamos que realice un análisis comparativo sus aplicaciones con y sin S3 Select para ver si su uso puede ser adecuado para su aplicación.

Utilice las siguientes directrices para determinar si la aplicación es candidata a utilizar S3 Select:

  • La consulta filtra más de la mitad del conjunto de datos original.

  • La conexión de red entre Amazon S3 y el EMR clúster de Amazon tiene una buena velocidad de transferencia y ancho de banda disponible. Amazon S3 no comprime HTTP las respuestas, por lo que es probable que el tamaño de la respuesta aumente en el caso de los archivos de entrada comprimidos.

Consideraciones y limitaciones

  • No se admite el cifrado del lado del servidor de Amazon S3 con claves de cifrado proporcionadas por el cliente (SSE-C) ni el cifrado del lado del cliente.

  • No se admite la propiedad AllowQuotedRecordDelimiters. Si se especifica esta propiedad, se producirá un error en la consulta.

  • Solo se admiten archivos en formato CSV -8JSON. UTF No CSVs se admiten las líneas múltiples.

  • Solo se admiten los archivos sin comprimir o gzip.

  • No se admiten Spark CSV ni JSON opciones como nanValuepositiveInf,negativeInf, ni opciones relacionadas con registros corruptos (por ejemplo, el modo failfast y dropmalformed).

  • El uso de comas (,) dentro de los decimales no se admite. Por ejemplo, 10,000 no se admite, pero sí se admite 10000.

  • No se admiten los caracteres de comentario en la última línea.

  • Las líneas vacías al final de un archivo no se procesan.

  • Los siguientes filtros no se delegan en Amazon S3:

    • Funciones de agregación como COUNT() y SUM().

    • Filtros que aplican CAST() a un atributo. Por ejemplo, CAST(stringColumn as INT) = 1.

    • Filtros con un atributo que es un objeto o es complejo. Por ejemplo, intArray[1] = 1, objectColumn.objectNumber = 1.

    • Filtros cuyo valor no es un valor literal. Por ejemplo, intColumn1 = intColumn2 .

    • Solo se admiten los tipos de datos compatibles con S3 Select con las limitaciones que se especifican.

Especificación de S3 Select en el código

Los siguientes ejemplos muestran cómo especificar S3 Select para CSV usar ScalaSQL, R y PySpark. Puede usar S3 Select for de JSON la misma manera. Para obtener una lista de las opciones, sus valores predeterminados y sus limitaciones, consulte Opciones.

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

Opciones

Las siguientes opciones están disponibles cuando se utilizan s3selectCSV y s3selectJSON. Si no se especifican, se usarán los valores predeterminados.

Opciones con S3select CSV

Opción Predeterminado Uso

compression

"none"

Indica si se utiliza la compresión. "gzip" es la única opción admitida además de "none".

delimiter

","

Especifica el delimitador de campo.

quote

'\"'

Especifica el carácter de comillas. No se admite especificar una cadena vacía y se produce un error de formato incorrectoXML.

escape

'\\'

Especifica el carácter de escape.

header

"false"

"false" especifica que no existe ningún encabezado. "true" especifica que hay un encabezado en la primera línea. Solo se admiten los encabezados en la primera línea, y no se admiten las líneas vacías antes del encabezado.

comentario

"#"

Especifica el carácter de comentario. El indicador de comentario no se puede deshabilitar. En otras palabras, no se admite el valor \u0000.

nullValue

""

Opciones con S3select JSON

Opción Predeterminado Uso

compression

"none"

Indica si se utiliza la compresión. "gzip" es la única opción admitida además de "none".

multiline

"false"

"false"especifica que JSON tiene el LINES formato S3 Select, lo que significa que cada línea de los datos de entrada contiene un único JSON objeto. "true"especifica que JSON tiene el DOCUMENT formato S3 Select, lo que significa que un JSON objeto puede abarcar varias líneas en los datos de entrada.