

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
<a name="emr-spark-s3select"></a>

**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](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Con Amazon EMR rilascio 5.17.0 e successivi, puoi utilizzare [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-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](#emr-spark-s3select-specify).

## S3 Select è adatto alla mia applicazione?
<a name="emr-spark-s3select-apps"></a>

È 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
<a name="emr-spark-s3select-considerations"></a>
+ 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. Le CSVs linee multiple non sono supportate.
+ 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) con le limitazioni documentate.

## Specificare S3 Select nel codice
<a name="emr-spark-s3select-specify"></a>

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](#emr-spark-s3select-specify-options).

------
#### [ 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
<a name="emr-spark-s3select-specify-options"></a>

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

#### Opzioni con S3selectCSV
<a name="emr-spark-s3select-specify-options-csv"></a>


| 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
<a name="emr-spark-s3select-specify-options-json"></a>


| 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.  | 