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

Con Amazon EMR rilascio 5.17.0 e successivi, puoi utilizzare S3 Select con Spark su Amazon EMR. S3 Select consente alle applicazioni il recupero di un solo sottoinsieme di dati da un oggetto. Per Amazon EMR, l'attività di calcolo di filtro di set di dati di grandi dimensioni per l'elaborazione viene "trasferita" dal cluster ad Amazon S3; in tal modo è possibile migliorare le prestazioni in alcune applicazioni e ridurre la quantità di dati trasferiti tra Amazon EMR e Amazon S3.

S3 Select è supportata con file CSV e JSON che utilizzano i valori s3selectCSV e s3selectJSON 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 connessione di rete tra Amazon S3 e il cluster Amazon EMR ha una buona velocità di trasferimento e larghezza di banda disponibile. Amazon S3 non comprime le risposte HTTP, pertanto è probabile che le dimensioni della risposta aumentino per file di input compressi.

Considerazioni e limitazioni

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

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

  • Sono supportati solo i file CSV e JSON in formato UTF-8. I file CSV a più righe non sono supportati.

  • Sono supportati solo i file non compressi o gzip.

  • Le opzioni Spark CSV e JSON quali nanValue, positiveInf, negativeInf e le opzioni relative a 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

Gli esempi seguenti mostrano come specificare S3 Select per CSV utilizzando Scala, SQL, R e. PySpark È possibile utilizzare S3 Select per JSON nello 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 S3selectCSV

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 specifica di una stringa vuota non è supportata e genera un errore di XML danneggiato.

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 S3selectJSON

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 è nel formato LINES S3 Select, che significa che ogni riga dei dati di input contiene un singolo oggetto JSON. "true" specifica che JSON è nel formato DOCUMENT S3 Select, che significa che un oggetto JSON può estendersi su più righe dei dati di input.