Usar o S3 Select com Spark para melhorar a performance das consultas - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o S3 Select com Spark para melhorar a performance das consultas

Com a EMR versão 5.17.0 da Amazon e versões posteriores, você pode usar o S3 Select com o Spark na Amazon. EMR O S3 Select possibilita que as aplicações recuperem apenas um subconjunto dos dados de um objeto. Para a AmazonEMR, o trabalho computacional de filtrar grandes conjuntos de dados para processamento é “transferido” do cluster para o Amazon S3, o que pode melhorar o desempenho em alguns aplicativos e reduzir a quantidade de dados transferidos entre a Amazon e o EMR Amazon S3.

O S3 Select é compatível com JSON arquivos CSV e s3selectJSON valores que usam s3selectCSV e para especificar o formato dos dados. Para ter mais informações e exemplos, consulte Especificar o S3 Select no seu código.

O S3 Select é adequado para minha aplicação?

Recomendamos que você avalie seus aplicativos com e sem o S3 Selecione para ver se o uso pode ser adequado para o aplicativo.

Use as seguintes diretrizes para determinar se o seu aplicativo é adequado para o uso do S3 Select:

  • Sua consulta filtra mais de metade do conjunto de dados original.

  • Sua conexão de rede entre o Amazon S3 e o EMR cluster da Amazon tem boa velocidade de transferência e largura de banda disponível. O Amazon S3 não compacta HTTP respostas, então é provável que o tamanho da resposta aumente para arquivos de entrada compactados.

Considerações e limitações

  • A criptografia do lado do servidor do Amazon S3 com chaves de criptografia fornecidas pelo cliente (SSE-C) e a criptografia do lado do cliente não são suportadas.

  • A propriedade AllowQuotedRecordDelimiters não é compatível. Se essa propriedade for especificada, a consulta falhará.

  • Somente JSON arquivos CSV e arquivos no formato UTF -8 são suportados. Não CSVs há suporte para várias linhas.

  • Somente arquivos descompactados ou gzip são compatíveis.

  • O Spark CSV e JSON opções comonanValue, positiveInfnegativeInf, e opções relacionadas a registros corrompidos (por exemplo, modo failfast e dropmalformed) não são suportados.

  • O uso de vírgulas (,) em casas decimais não é compatível. Por exemplo, 10,000 não é compatível, mas 10000 é.

  • Caracteres de comentário na última linha não são compatíveis.

  • Linhas vazias no final de um arquivo não são processadas.

  • Os seguintes filtros não são enviados para o Amazon S3:

    • Funções agregadas, como COUNT() e SUM().

    • Filtros que CAST() um atributo. Por exemplo, CAST(stringColumn as INT) = 1.

    • Filtros com um atributo que é um objeto ou complexo. Por exemplo, intArray[1] = 1, objectColumn.objectNumber = 1.

    • Filtros para os quais o valor não é um valor literal. Por exemplo, intColumn1 = intColumn2.

    • Somente tipos de dados compatíveis com o S3 Select são compatíveis com as limitações documentadas.

Especificar o S3 Select no seu código

Os exemplos a seguir demonstram como especificar o S3 Select para CSV usar Scala, SQL R e. PySpark Você pode usar o S3 Select for JSON da mesma forma. Para obter uma lista de opções, os valores padrão e limitações, consulte Opções.

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

Opções

As seguintes opções estão disponíveis ao usar s3selectCSV e s3selectJSON. Se não for especificado, os valores padrão serão usados.

Opções com S3select CSV

Opção Padrão Uso

compression

"none"

Indica se a compactação é usada. "gzip" é a única configuração compatível além de "none".

delimiter

","

Especifica o delimitador de campo.

quote

'\"'

Especifica o caractere de aspas. A especificação de uma string vazia não é suportada e resulta em um erro malformadoXML.

escape

'\\'

Especifica o caractere de escape.

header

"false"

"false" especifica que não há cabeçalho. "true" especifica que o cabeçalho está na primeira linha. Somente cabeçalhos na primeira linha são suportados e linhas vazias antes de um cabeçalho não são compatíveis.

comentário

"#"

Especifica o caractere de comentário. O indicador de comentários não pode ser desativado. Em outras palavras, um valor de \u0000 não é suportado.

nullValue

""

Opções com S3select JSON

Opção Padrão Uso

compression

"none"

Indica se a compactação é usada. "gzip" é a única configuração compatível além de "none".

multiline

"falso"

"false"especifica que o JSON está no LINES formato S3 Select, o que significa que cada linha nos dados de entrada contém um único JSON objeto. "true"especifica que o JSON está no DOCUMENT formato S3 Select, o que significa que um JSON objeto pode abranger várias linhas nos dados de entrada.