

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

# Utilizzo delle funzioni Hive definite dall'utente con EMR Serverless
<a name="using-hive-udf"></a>

Le funzioni definite dall'utente di Hive (UDFs) consentono di creare funzioni personalizzate per elaborare record o gruppi di record. In questo tutorial, utilizzerai un UDF di esempio con un'applicazione Amazon EMR Serverless preesistente per eseguire un processo che genera un risultato di query. Per informazioni su come configurare un'applicazione, consulta. [Inizia a usare Amazon EMR Serverless](getting-started.md)

**Per utilizzare un UDF con EMR Serverless**

1. Vai alla pagina UDF [GitHub](https://github.com/jeromebanks/brickhouse)per un esempio. Clona il repository e passa al ramo git che desideri utilizzare. Aggiorna il `pom.xml` file `maven-compiler-plugin` nel repository per avere una fonte. Aggiorna anche la configurazione della versione java di destinazione su`1.8`. Esegui `mvn package -DskipTests` per creare il file JAR che contiene il tuo campione UDFs.

1. Dopo aver creato il file JAR, caricalo nel tuo bucket S3 con il seguente comando. 

   ```
   aws s3 cp brickhouse-0.8.2-JS.jar s3://{{amzn-s3-demo-bucket}}/jars/
   ```

1. Crea un file di esempio per utilizzare una delle funzioni UDF di esempio. Salva questa query con nome `udf_example.q` e caricala nel tuo bucket S3.

   ```
   add jar s3://{{amzn-s3-demo-bucket}}/jars/brickhouse-0.8.2-JS.jar;
   CREATE TEMPORARY FUNCTION from_json AS 'brickhouse.udf.json.FromJsonUDF';
   select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int))));
   select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int))))["key1"][2];
   ```

1. Invia il seguente lavoro Hive. 

   ```
   aws emr-serverless start-job-run \
     --application-id {{application-id}} \
     --execution-role-arn {{job-role-arn}} \
     --job-driver '{
       "hive": {
           "query": "s3://{{amzn-s3-demo-bucket}}/queries/udf_example.q",
           "parameters": "--hiveconf hive.exec.scratchdir=s3://{{amzn-s3-demo-bucket}}/emr-serverless-hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://'$BUCKET'/emr-serverless-hive/warehouse"
       }
   }' --configuration-overrides '{
       "applicationConfiguration": [{
           "classification": "hive-site",
           "properties": {
               "hive.driver.cores": "2",
               "hive.driver.memory": "6G"
           }
       }],
       "monitoringConfiguration": {
           "s3MonitoringConfiguration": {
               "logUri": "s3://{{amzn-s3-demo-bucket}}/logs/"
           }
       }
   }'
   ```

1. Usa il `get-job-run` comando per controllare lo stato del tuo lavoro. Attendi che lo stato cambi in`SUCCESS`.

   ```
   aws emr-serverless get-job-run --application-id {{application-id}} --job-run-id {{job-id}}
   ```

1. Scarica i file di output con il seguente comando.

   ```
   aws s3 cp --recursive s3://{{amzn-s3-demo-bucket}}/logs/applications/{{application-id}}/jobs/{{job-id}}/HIVE_DRIVER/ .
   ```

   Il `stdout.gz` file è simile al seguente.

   ```
   {"key1":[0,1,2],"key2":[3,4,5,6],"key3":[7,8,9]}
   2
   ```