

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

# Ottieni informazioni sui problemi noti in Athena per Spark.
<a name="notebooks-spark-known-issues"></a>

Questa pagina documenta alcuni dei problemi noti di Athena per Apache Spark.

## Eccezione di argomento illegale durante la creazione di una tabella
<a name="notebooks-spark-known-issues-illegal-argument-exception"></a>

Sebbene Spark non consenta la creazione di database con una proprietà location vuota, i database in AWS Glue possono avere una `LOCATION` proprietà vuota se vengono creati all'esterno di Spark.

Se crei una tabella e specifichi un AWS Glue database con un `LOCATION` campo vuoto, può verificarsi un'eccezione come la seguente IllegalArgumentException: Impossibile creare un percorso da una stringa vuota.

Ad esempio, il comando seguente genera un'eccezione se il database predefinito in AWS Glue contiene un campo `LOCATION` vuoto:

```
spark.sql("create table testTable (firstName STRING)")
```

**Soluzione consigliata AWS Glue A**: da utilizzare per aggiungere una posizione al database in uso.

**Per aggiungere una posizione a un AWS Glue database**

1. Accedi a Console di gestione AWS e apri la AWS Glue console all'indirizzo [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Nel pannello di navigazione, seleziona **Database**.

1. Nell'elenco dei database, scegli il nome del database da modificare.

1. Nella pagina dei dettagli per il database, scegli **Edit** (Modifica).

1. Nella pagina **Update a database** (Aggiorna un database), in **Location** (Posizione), inserisci una posizione Amazon S3.

1. Scegli **Update Database** (Aggiorna database).

**Soluzione consigliata B**: utilizza un database AWS Glue diverso con una posizione esistente e valida in Amazon S3. Ad esempio, se hai un database denominato `dbWithLocation`, utilizza il comando `spark.sql("use dbWithLocation")` per passare a quel database.

**Soluzione consigliata C**: quando utilizzi Spark SQL per creare la tabella, specifica un valore per `location`, come nell'esempio seguente.

```
spark.sql("create table testTable (firstName STRING) 
       location 's3://amzn-s3-demo-bucket/'").
```

**Soluzione consigliata D**: se hai specificato una posizione quando hai creato la tabella ma il problema persiste, assicurati che il percorso Amazon S3 fornito abbia una barra finale. Ad esempio, il comando seguente genera un'eccezione di argomento illegale:

```
spark.sql("create table testTable (firstName STRING) 
       location 's3://amzn-s3-demo-bucket'")
```

Per correggere questo problema, aggiungi una barra finale alla posizione (ad esempio, `'s3://amzn-s3-demo-bucket/'`).

## Database creato in una posizione del gruppo di lavoro
<a name="notebooks-spark-known-issues-database-created-in-a-workgroup-location"></a>

Se si utilizza un comando come `spark.sql('create database db')` per creare un database e non si specifica una posizione per il database, Athena crea una sottodirectory nella posizione del gruppo di lavoro e la utilizza per il database appena creato.

## Problemi con le tabelle gestite da Hive nel database AWS Glue predefinito
<a name="notebooks-spark-known-issues-managed-tables"></a>

Se la `Location` proprietà del database predefinito in non AWS Glue è vuota e specifica una posizione valida in Amazon S3 e utilizzi Athena for Spark per creare una tabella gestita Hive nel AWS Glue tuo database predefinito, i dati vengono scritti nella posizione Amazon S3 specificata nel gruppo di lavoro Athena Spark anziché nella posizione specificata dal database. AWS Glue 

Questo problema si verifica a causa del modo in cui Apache Hive gestisce il database predefinito. Apache Hive crea dati di tabella nella posizione principale del magazzino Hive, che può essere diversa dall'effettiva posizione predefinita del database.

Quando usi Athena for Spark per creare una tabella gestita Hive nel database predefinito in AWS Glue, i metadati della AWS Glue tabella possono puntare a due posizioni diverse. Ciò può causare un comportamento imprevisto quando si tenta un'operazione `INSERT` o `DROP TABLE`.

I passaggi per riprodurre il problema sono i seguenti:

1. In Athena for Spark, usi uno dei seguenti metodi per creare o salvare una tabella gestita da Hive:
   + Un'istruzione SQL come `CREATE TABLE $tableName`
   + Un PySpark comando del `df.write.mode("overwrite").saveAsTable($tableName)` genere non specifica l'`path`opzione nell'API Dataframe.

   A questo punto, la AWS Glue console potrebbe mostrare una posizione errata in Amazon S3 per la tabella.

1. In Athena per Spark, utilizza l'istruzione `DROP TABLE $table_name` per eliminare la tabella che hai creato.

1. Dopo aver eseguito l'istruzione `DROP TABLE`, noterai che i file sottostanti in Amazon S3 sono ancora presenti.

Per risolvere il problema, procedi in uno dei seguenti modi:

**Soluzione A**: utilizza un AWS Glue database diverso quando crei tabelle gestite da Hive.

**Soluzione B**: specifica un percorso vuoto per il database predefinito in AWS Glue. Quindi, create le tabelle gestite nel database predefinito.

## Incompatibilità dei formati di file CSV e JSON tra Athena for Spark e Athena SQL
<a name="notebooks-spark-known-issues-csv-and-json-file-format-incompatibility"></a>

A causa di un problema noto con Spark open source, quando crei una tabella in Athena per Spark su dati CSV o JSON, la tabella potrebbe non essere leggibile da Athena SQL e viceversa. 

Ad esempio, è possibile creare una tabella in Athena per Spark in uno dei seguenti modi: 
+ Con la seguente sintassi `USING csv`: 

  ```
  spark.sql('''CREATE EXTERNAL TABLE $tableName ( 
  $colName1 $colType1, 
  $colName2 $colType2, 
  $colName3 $colType3) 
  USING csv 
  PARTITIONED BY ($colName1) 
  LOCATION $s3_location''')
  ```
+  Con la seguente sintassi [DataFrame](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/dataframe.html)API: 

  ```
  df.write.format('csv').saveAsTable($table_name)
  ```

A causa del problema noto con Spark open source, le query di Athena SQL sulle tabelle risultanti potrebbero non avere esito positivo. 

**Soluzione consigliata**: prova a creare la tabella in Athena per Spark usando la sintassi Apache Hive. Per ulteriori informazioni, consulta [CREATE HIVEFORMAT TABLE](https://spark.apache.org/docs/latest/sql-ref-syntax-ddl-create-table-hiveformat.html) nella documentazione di Apache Spark. 