Usare S3 Select con Spark per migliorare le prestazioni delle query - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usare S3 Select con Spark per migliorare le prestazioni delle query

Importante

Amazon S3 Select non è più disponibile per i nuovi clienti. I clienti esistenti di Amazon S3 Select possono continuare a utilizzare la funzionalità come di consueto. Ulteriori informazioni

Con Amazon EMR versione 5.17.0 e successive, puoi usare S3 Select con Spark su Amazon. EMR S3 Select consente alle applicazioni il recupero di un solo sottoinsieme di dati da un oggetto. Per AmazonEMR, il lavoro computazionale di filtraggio di grandi set di dati per l'elaborazione viene «trasferito» dal cluster ad Amazon S3, il che può migliorare le prestazioni in alcune applicazioni e ridurre la quantità di dati trasferiti tra Amazon e Amazon S3. EMR

S3 Select è supportato con CSV e utilizza JSON i s3selectJSON valori s3selectCSV e per specificare il formato dei dati. Per maggiori informazioni ed esempi, consulta Specificare S3 Select nel codice.

S3 Select è adatto alla mia applicazione?

È consigliabile eseguire analisi comparative delle applicazioni con e senza S3 Select per vedere se l'utilizzo di tale caratteristica può risultare idoneo per l'applicazione.

Per determinare se l'applicazione è idonea per l'uso di S3 Select, utilizza le seguenti linee guida:

  • La query filtra più di metà del set di dati originale.

  • La tua connessione di rete tra Amazon S3 e il EMR cluster Amazon ha una buona velocità di trasferimento e larghezza di banda disponibile. Amazon S3 non comprime HTTP le risposte, quindi è probabile che la dimensione della risposta aumenti per i file di input compressi.

Considerazioni e limitazioni

  • La crittografia lato server di Amazon S3 con chiavi di crittografia fornite dal cliente (SSE-C) e la crittografia lato client non sono supportate.

  • La proprietà AllowQuotedRecordDelimiters non è supportata. Se questa proprietà è specificata, la query ha esito negativo.

  • Sono supportati solo i file CSV in formato -8. JSON UTF CSVsLe linee multiple non sono supportate.

  • Sono supportati solo i file non compressi o gzip.

  • Spark CSV e JSON opzioni comenanValue, positiveInfnegativeInf, e le opzioni relative ai record danneggiati (ad esempio, le modalità failfast e dropmalformed) non sono supportate.

  • L'utilizzo di virgole (,) all'interno di decimali non è supportato. Ad esempio, 10,000 non è supportato, mentre è supportato 10000.

  • I caratteri di commento nell'ultima riga non sono supportati.

  • Le righe vuote alla fine di un file non vengono elaborate.

  • I filtri seguenti non sono trasferiti ad Amazon S3:

    • Funzioni di aggregazione quali COUNT() e SUM().

    • Filtri che eseguono il CAST() di un attributo. Ad esempio CAST(stringColumn as INT) = 1.

    • Filtri con un attributo che è un oggetto o è complesso. Ad esempio intArray[1] = 1, objectColumn.objectNumber = 1.

    • I filtri per i quali il valore non è un valore letterale. Ad esempio, intColumn1 = intColumn2.

    • Sono supportati solo tipi di dati supportati da S3 Select con le limitazioni documentate.

Specificare S3 Select nel codice

I seguenti esempi mostrano come specificare S3 Select per CSV l'utilizzo di ScalaSQL, R e PySpark. Puoi usare S3 Select for JSON allo stesso modo. Per un elenco delle opzioni, dei relativi valori predefiniti e le limitazioni, consulta Opzioni.

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

Opzioni

Le seguenti opzioni sono disponibili quando si utilizzano s3selectCSV e s3selectJSON. Se non specificate, verranno utilizzati i valori predefiniti.

Opzioni con S3Select CSV

Opzione Predefinita Utilizzo

compression

"none"

Indica se viene utilizzata la compressione. "gzip" è l'unica impostazione supportata oltre a "none".

delimiter

","

Specifica il delimitatore del campo.

quote

'\"'

Specifica il carattere virgoletta. La specificazione di una stringa vuota non è supportata e genera un errore di formato errato. XML

escape

'\\'

Specifica il carattere di escape.

header

"false"

"false" specifica che non è presente alcuna intestazione. "true" specifica che nella prima riga è presente un'intestazione. Sono supportate solo le intestazioni nella prima riga e non sono supportate righe vuote prima di un'intestazione.

comment

"#"

Specifica il carattere per commenti. Non è possibile disabilitare l'indicatore dei commenti. In altre parole, il valore \u0000 non è supportato.

nullValue

""

Opzioni con S3select JSON

Opzione Predefinita Utilizzo

compression

"none"

Indica se viene utilizzata la compressione. "gzip" è l'unica impostazione supportata oltre a "none".

multiline

"false"

"false"specifica che JSON è in LINES formato S3 Select, il che significa che ogni riga dei dati di input contiene un singolo oggetto. JSON "true"specifica che JSON è in DOCUMENT formato S3 Select, il che significa che un JSON oggetto può estendersi su più righe nei dati di input.