

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

# Apache Spark con Amazon AI SageMaker
<a name="apache-spark"></a>

Amazon SageMaker AI Spark è una libreria Spark open source che ti aiuta a creare pipeline di machine learning (ML) Spark con l'intelligenza artificiale. SageMaker Ciò semplifica l'integrazione delle fasi di Spark ML con le fasi di SageMaker intelligenza artificiale, come la formazione e l'hosting dei modelli. Per informazioni su SageMaker AI Spark, consulta il repository [SageMaker AI](https://github.com/aws/sagemaker-spark) Spark. GitHub I seguenti argomenti forniscono informazioni per imparare a usare Apache Spark con l'intelligenza artificiale. SageMaker 

La libreria SageMaker AI Spark è disponibile in Python e Scala. Puoi usare SageMaker AI Spark per addestrare modelli nell' SageMaker intelligenza artificiale utilizzando i frame di `org.apache.spark.sql.DataFrame` dati nei tuoi cluster Spark. Dopo l'addestramento del modello, puoi anche ospitare il modello utilizzando i servizi di hosting SageMaker AI. 

La libreria SageMaker AI Spark fornisce`com.amazonaws.services.sagemaker.sparksdk`, tra le altre, le seguenti classi:
+ `SageMakerEstimator`: estende l'interfaccia `org.apache.spark.ml.Estimator`. Puoi usare questo stimatore per l'addestramento dei modelli nell' SageMaker intelligenza artificiale.
+ `KMeansSageMakerEstimator`, `PCASageMakerEstimator` e `XGBoostSageMakerEstimator`: estendono la classe `SageMakerEstimator`. 
+ `SageMakerModel`: estende la classe `org.apache.spark.ml.Model`. Puoi usarlo `SageMakerModel` per l'hosting di modelli e ottenere inferenze nell' SageMaker intelligenza artificiale.

Puoi scaricare il codice sorgente per entrambe le librerie Python Spark (PySpark) e Scala dal repository [SageMaker AI](https://github.com/aws/sagemaker-spark) Spark. GitHub

Per l'installazione e gli esempi della libreria SageMaker AI Spark, consulta o. [SageMaker Esempi di AI Spark per Scala](apache-spark-example1.md) [Risorse per l'utilizzo di esempi di SageMaker AI Spark for Python (PySpark)](apache-spark-additional-examples.md)

[Se usi Amazon EMR AWS per gestire i cluster Spark, consulta Apache Spark.](https://aws.amazon.com/emr/features/spark/) Per ulteriori informazioni sull'utilizzo di Amazon EMR nell' SageMaker intelligenza artificiale, consulta. [Preparazione dei dati con Amazon EMR](studio-notebooks-emr-cluster.md)

**Topics**
+ [Integra la tua applicazione Apache Spark con l'intelligenza artificiale SageMaker](#spark-sdk-common-process)
+ [SageMaker Esempi di AI Spark per Scala](apache-spark-example1.md)
+ [Risorse per l'utilizzo di esempi di SageMaker AI Spark for Python (PySpark)](apache-spark-additional-examples.md)

## Integra la tua applicazione Apache Spark con l'intelligenza artificiale SageMaker
<a name="spark-sdk-common-process"></a>

Di seguito è riportato un riepilogo di alto livello dei passaggi per l'integrazione dell'applicazione Apache Spark con l'intelligenza artificiale. SageMaker 

1. Continua con la preelaborazione dei dati utilizzando la libreria Apache Spark con cui hai familiarità. Il set di dati rimane un `DataFrame` nel tuo cluster Spark. Carica i dati in un `DataFrame`. Pre-elaborali in modo da avere una colonna `features` con `org.apache.spark.ml.linalg.Vector` di `Doubles` e una colonna `label` facoltativa con valori di tipo `Double`.

1. Usa lo stimatore nella libreria SageMaker AI Spark per addestrare il tuo modello. Ad esempio, se scegli l'algoritmo k-means fornito dall' SageMaker IA per l'addestramento dei modelli, chiama il metodo. `KMeansSageMakerEstimator.fit` 

   Come input fornisci il tuo `DataFrame`. Lo strumento di valutazione restituisce un oggetto `SageMakerModel`. 
**Nota**  
`SageMakerModel` estende `org.apache.spark.ml.Model`.

   Il metodo `fit` esegue quanto segue: 

   1. Converte l’input `DataFrame` nel formato protobuf. Per farlo, seleziona le colonne `features` e `label` dall’input `DataFrame`. Quindi carica i dati protobuf in un bucket Amazon S3. Il formato protobuf è efficiente per l'addestramento dei modelli nell'intelligenza artificiale. SageMaker 

   1. Avvia l'addestramento dei modelli in SageMaker intelligenza artificiale inviando una richiesta di SageMaker intelligenza artificiale [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html). Una volta completato l'addestramento del modello, l' SageMaker intelligenza artificiale salva gli artefatti del modello in un bucket S3. 

      SageMaker L'IA assume il ruolo IAM che hai specificato per la formazione dei modelli per eseguire attività per tuo conto. Ad esempio, utilizza il ruolo per leggere i dati di addestramento da un bucket S3 e scrivere artefatti del modello in un bucket. 

   1. Crea e restituisce un oggetto `SageMakerModel`. Il costruttore svolge le seguenti attività, correlate all'implementazione del modello nell'IA. SageMaker 

      1. Invia una [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)richiesta all'IA. SageMaker 

      1. Invia una [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)richiesta all' SageMaker IA.

      1. Invia una [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)richiesta all' SageMaker IA, che quindi avvia le risorse specificate e ospita il modello su di esse. 

1. Puoi ottenere inferenze dal tuo modello ospitato in SageMaker AI con. `SageMakerModel.transform` 

   Fornisci un input `DataFrame` con caratteristiche come input. Il metodo `transform` lo converte in un `DataFrame` contenente inferenze. Internamente, il `transform` metodo invia una richiesta all'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) SageMaker API per ottenere inferenze. Il metodo `transform` collega le inferenze all'input `DataFrame`.

# SageMaker Esempi di AI Spark per Scala
<a name="apache-spark-example1"></a>

Amazon SageMaker AI fornisce una libreria Apache Spark ([SageMaker AI Spark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-spark-sdk)) che puoi utilizzare per integrare le tue applicazioni Apache Spark con l'intelligenza artificiale. SageMaker Questo argomento contiene esempi per aiutarti a iniziare a usare AI Spark con SageMaker Scala. Per informazioni sulla libreria SageMaker AI Apache Spark, consulta. [Apache Spark con Amazon AI SageMaker](apache-spark.md)

**Download di Spark per Scala**

Puoi scaricare il codice sorgente e gli esempi per entrambe le librerie Python Spark (PySpark) e Scala dal repository [SageMaker AI](https://github.com/aws/sagemaker-spark) Spark. GitHub 

[Per istruzioni dettagliate sull'installazione della libreria AI Spark, SageMaker consulta AI Spark. SageMaker ](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-spark-sdk)

SageMaker AI Spark SDK per Scala è disponibile nell'archivio centrale di Maven. Aggiungi la libreria Spark al progetto aggiungendo la seguente dipendenza al file `pom.xml`:
+  Se il progetto è stato creato con Maven, aggiungi quanto segue al file pom.xml:

  ```
  <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>sagemaker-spark_2.11</artifactId>
      <version>spark_2.2.0-1.0</version>
  </dependency>
  ```
+ Se il progetto dipende da Spark 2.1, aggiungi quanto segue al tuo file pom.xml:

  ```
  <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>sagemaker-spark_2.11</artifactId>
      <version>spark_2.1.1-1.0</version>
  </dependency>
  ```

**Esempio di Spark per Scala**

Questa sezione fornisce un codice di esempio che utilizza la libreria Apache Spark Scala fornita da SageMaker AI per addestrare un modello in SageMaker AI utilizzando s nel cluster Spark. `DataFrame` Il codice è seguito da esempi sulle procedure [Usa algoritmi personalizzati per l'addestramento e l'hosting dei modelli su Amazon SageMaker AI con Apache Spark](apache-spark-example1-cust-algo.md) e [Utilizzali in una pipeline SageMakerEstimator Spark](apache-spark-example1-extend-pipeline.md).

L'esempio seguente ospita gli artefatti del modello risultanti utilizzando i servizi di hosting AI. SageMaker Per maggiori dettagli su questo esempio, vedi [Getting Started: K-Means Clustering on SageMaker AI with SageMaker AI Spark SDK](https://github.com/aws/sagemaker-spark?tab=readme-ov-file#getting-started-k-means-clustering-on-sagemaker-with-sagemaker-spark-sdk) In particolare, questo esempio esegue le seguenti operazioni:
+ Utilizza il metodo `KMeansSageMakerEstimator` per adattare (o addestrare) un modello ai dati

  Poiché l'esempio utilizza l'algoritmo k-means fornito dall' SageMaker IA per addestrare un modello, utilizzi il. `KMeansSageMakerEstimator` Per addestrare il modello, utilizza le immagini di numeri a cifra singola scritti a mano (dal set di dati MNIST) e fornisci le immagini come input `DataFrame`. Per comodità, l' SageMaker intelligenza artificiale fornisce questo set di dati in un bucket Amazon S3.

  In risposta, lo strumento di valutazione restituisce un oggetto `SageMakerModel`.
+ Ottiene le interferenze utilizzando il `SageMakerModel` preparato

  Per ottenere inferenze da un modello ospitato nell' SageMaker intelligenza artificiale, chiami il metodo. `SageMakerModel.transform` Trasmetti un `DataFrame` come input. Il metodo trasforma l'input `DataFrame` a un altro `DataFrame` contenente le interferenze ottenute dal modello. 

  Per una determinata immagine di input di un numero a singola cifra scritto a mano, l'interferenza individua un cluster a cui appartiene l'immagine. Per ulteriori informazioni, consulta [Algoritmo K-Means](k-means.md).

```
import org.apache.spark.sql.SparkSession
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.algorithms
import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator

val spark = SparkSession.builder.getOrCreate

// load mnist data as a dataframe from libsvm
val region = "us-east-1"
val trainingData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
val testData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")

val roleArn = "arn:aws:iam::account-id:role/rolename"

val estimator = new KMeansSageMakerEstimator(
  sagemakerRole = IAMRole(roleArn),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1)
  .setK(10).setFeatureDim(784)

// train
val model = estimator.fit(trainingData)

val transformedData = model.transform(testData)
transformedData.show
```

Il codice esemplificativo si comporta come segue:
+ Carica il set di dati MNIST da un bucket S3 fornito da SageMaker AI (`awsai-sparksdk-dataset`) in uno Spark (): `DataFrame` `mnistTrainingDataFrame`

  ```
  // Get a Spark session.
  
  val spark = SparkSession.builder.getOrCreate
  
  // load mnist data as a dataframe from libsvm
  val region = "us-east-1"
  val trainingData = spark.read.format("libsvm")
    .option("numFeatures", "784")
    .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
  val testData = spark.read.format("libsvm")
    .option("numFeatures", "784")
    .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")
  
  val roleArn = "arn:aws:iam::account-id:role/rolename"
  trainingData.show()
  ```

  Il metodo `show` visualizza le prime 20 righe del frame di dati:

  ```
  +-----+--------------------+
  |label|            features|
  +-----+--------------------+
  |  5.0|(784,[152,153,154...|
  |  0.0|(784,[127,128,129...|
  |  4.0|(784,[160,161,162...|
  |  1.0|(784,[158,159,160...|
  |  9.0|(784,[208,209,210...|
  |  2.0|(784,[155,156,157...|
  |  1.0|(784,[124,125,126...|
  |  3.0|(784,[151,152,153...|
  |  1.0|(784,[152,153,154...|
  |  4.0|(784,[134,135,161...|
  |  3.0|(784,[123,124,125...|
  |  5.0|(784,[216,217,218...|
  |  3.0|(784,[143,144,145...|
  |  6.0|(784,[72,73,74,99...|
  |  1.0|(784,[151,152,153...|
  |  7.0|(784,[211,212,213...|
  |  2.0|(784,[151,152,153...|
  |  8.0|(784,[159,160,161...|
  |  6.0|(784,[100,101,102...|
  |  9.0|(784,[209,210,211...|
  +-----+--------------------+
  only showing top 20 rows
  ```

  In ogni riga:
  + La colonna `label` individua l'etichetta dell'immagine. Ad esempio, se l'immagine del numero scritto a mano è la cifra 5, il valore dell'etichetta è 5. 
  + La colonna `features` archivia un vettore (`org.apache.spark.ml.linalg.Vector`) dei valori di `Double`. Si tratta delle 784 caratteristiche del numero scritto a mano (ogni numero scritto a mano è un'immagine da 28 x 28 pixel, che crea 784 caratteristiche).
+ Crea uno stimatore AI () SageMaker `KMeansSageMakerEstimator` 

  Il `fit` metodo di questo stimatore utilizza l'algoritmo k-means fornito dall' SageMaker IA per addestrare i modelli utilizzando un input. `DataFrame` In risposta, restituisce un oggetto `SageMakerModel` che può essere utilizzato per ottenere le inferenze.
**Nota**  
`KMeansSageMakerEstimator`Estende l' SageMaker IA`SageMakerEstimator`, che estende Apache Spark. `Estimator` 

  ```
  val estimator = new KMeansSageMakerEstimator(
    sagemakerRole = IAMRole(roleArn),
    trainingInstanceType = "ml.p2.xlarge",
    trainingInstanceCount = 1,
    endpointInstanceType = "ml.c4.xlarge",
    endpointInitialInstanceCount = 1)
    .setK(10).setFeatureDim(784)
  ```

   

  I parametri del costruttore forniscono informazioni che vengono utilizzate per addestrare un modello e implementarlo sull'intelligenza artificiale: SageMaker 
  + `trainingInstanceType` e `trainingInstanceCount`: individuano il tipo e il numero delle istanze di calcolo ML da utilizzare per l'addestramento del modello.
  + `endpointInstanceType`—Identifica il tipo di istanza di calcolo ML da utilizzare per ospitare il modello in AI. SageMaker Per impostazione predefinita, viene utilizzata un'istanza di calcolo ML.
  + `endpointInitialInstanceCount`—Identifica il numero di istanze di calcolo ML che inizialmente supportano l'endpoint che ospita il modello nell'intelligenza artificiale. SageMaker 
  + `sagemakerRole`— SageMaker L'IA assume questo ruolo IAM per eseguire attività per tuo conto. Ad esempio, per l’addestramento del modello, legge i dati dal bucket S3 e scrive i risultati dell’addestramento (artefatti del modello) nello stesso. 
**Nota**  
Questo esempio crea implicitamente un client SageMaker AI. Per creare questo client, devi fornire le tue credenziali, L'API utilizza queste credenziali per autenticare le richieste all'IA. SageMaker Ad esempio, utilizza le credenziali per autenticare le richieste per creare un processo di formazione e le chiamate API per l'implementazione del modello utilizzando i servizi di hosting AI. SageMaker 
  + Una volta creato l'oggetto `KMeansSageMakerEstimator`, devi impostare i seguenti parametri che verranno utilizzato per l’addestramento del modello: 
    + Numero di cluster che l'algoritmo k-means deve creare durante l’addestramento del modello. Possono essere specificati 10 cluster, uno per ogni cifra, da 0 a 9. 
    + Parametro che verifica se ogni immagine di input dispone di 784 caratteristiche (ogni numero scritto a mano è un'immagine da 28 x 28 pixel, che crea 784 caratteristiche).
+ Chiama il metodo `fit` dello strumento di valutazione.

  ```
  // train
  val model = estimator.fit(trainingData)
  ```

  Trasmetti l'input `DataFrame` come parametro. Il modello fa tutto il lavoro di addestramento del modello e di implementazione nell'IA. SageMaker Per ulteriori informazioni, consultare [Integra la tua applicazione Apache Spark con l'intelligenza artificiale SageMaker](apache-spark.md#spark-sdk-common-process). In risposta, si ottiene un `SageMakerModel` oggetto, che è possibile utilizzare per ottenere inferenze dal modello distribuito nell'intelligenza artificiale. SageMaker 

  Puoi fornire solo l'input `DataFrame`. Non è necessario specificare il percorso di registro dell'algoritmo k-means utilizzato per l’addestramento del modello in quanto la `KMeansSageMakerEstimator` lo conosce.
+ Richiama il `SageMakerModel.transform` metodo per ottenere inferenze dal modello distribuito nell'intelligenza artificiale. SageMaker 

  Il metodo `transform` acquisisce un `DataFrame` come input, lo converte e restituisce un altro `DataFrame` contenente le interferenze ottenute dal modello. 

  ```
  val transformedData = model.transform(testData)
  transformedData.show
  ```

  Per semplicità, utilizziamo lo stesso `DataFrame` come input per il metodo `transform` che abbiamo utilizzato per l’addestramento del modello in questo esempio. Il metodo `transform` esegue quanto segue:
  + Serializza la `features` colonna nell'input di protobuf e la invia `DataFrame` all'endpoint AI per l'inferenza. SageMaker 
  + Deserializza la risposta protobuf nelle due colonne aggiuntive (`distance_to_cluster` e `closest_cluster`) nel `DataFrame` convertito.

  Il metodo `show` ottiene le inferenze per le prime 20 righe nell'input `DataFrame`: 

  ```
  +-----+--------------------+-------------------+---------------+
  |label|            features|distance_to_cluster|closest_cluster|
  +-----+--------------------+-------------------+---------------+
  |  5.0|(784,[152,153,154...|  1767.897705078125|            4.0|
  |  0.0|(784,[127,128,129...|  1392.157470703125|            5.0|
  |  4.0|(784,[160,161,162...| 1671.5711669921875|            9.0|
  |  1.0|(784,[158,159,160...| 1182.6082763671875|            6.0|
  |  9.0|(784,[208,209,210...| 1390.4002685546875|            0.0|
  |  2.0|(784,[155,156,157...|  1713.988037109375|            1.0|
  |  1.0|(784,[124,125,126...| 1246.3016357421875|            2.0|
  |  3.0|(784,[151,152,153...|  1753.229248046875|            4.0|
  |  1.0|(784,[152,153,154...|  978.8394165039062|            2.0|
  |  4.0|(784,[134,135,161...|  1623.176513671875|            3.0|
  |  3.0|(784,[123,124,125...|  1533.863525390625|            4.0|
  |  5.0|(784,[216,217,218...|  1469.357177734375|            6.0|
  |  3.0|(784,[143,144,145...|  1736.765869140625|            4.0|
  |  6.0|(784,[72,73,74,99...|   1473.69384765625|            8.0|
  |  1.0|(784,[151,152,153...|    944.88720703125|            2.0|
  |  7.0|(784,[211,212,213...| 1285.9071044921875|            3.0|
  |  2.0|(784,[151,152,153...| 1635.0125732421875|            1.0|
  |  8.0|(784,[159,160,161...| 1436.3162841796875|            6.0|
  |  6.0|(784,[100,101,102...| 1499.7366943359375|            7.0|
  |  9.0|(784,[209,210,211...| 1364.6319580078125|            6.0|
  +-----+--------------------+-------------------+---------------+
  ```

  Puoi interpretare i dati come segue:
  + Un numero scritto a mano con `label` 5 appartiene al cluster 4 (`closest_cluster`).
  + Un numero scritto a mano con `label` 0 appartiene al cluster 5.
  + Un numero scritto a mano con `label` 4 appartiene al cluster 9.
  + Un numero scritto a mano con `label` 1 appartiene al cluster 6.

**Topics**
+ [Usa algoritmi personalizzati per l'addestramento e l'hosting dei modelli su Amazon SageMaker AI con Apache Spark](apache-spark-example1-cust-algo.md)
+ [Utilizzali in una pipeline SageMakerEstimator Spark](apache-spark-example1-extend-pipeline.md)

# Usa algoritmi personalizzati per l'addestramento e l'hosting dei modelli su Amazon SageMaker AI con Apache Spark
<a name="apache-spark-example1-cust-algo"></a>

In[SageMaker Esempi di AI Spark per Scala](apache-spark-example1.md), usi il `kMeansSageMakerEstimator` perché l'esempio utilizza l'algoritmo k-means fornito da Amazon SageMaker AI per l'addestramento dei modelli. Per l’addestramento del modello, puoi anche scegliere di utilizzare un algoritmo personalizzato. Presupponendo che tu abbia già creato un immagine Docker, puoi creare un oggetto `SageMakerEstimator` personalizzato e specificare il percorso Amazon Elastic Container Registry per l'immagine personalizzata. 

Il seguente esempio mostra come creare `KMeansSageMakerEstimator` da `SageMakerEstimator`. Nel nuovo strumento di valutazione, devi specificare in modo esplicito il percorso di registro Docker per le immagini del codice di addestramento e interferenza.

```
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.SageMakerEstimator
import com.amazonaws.services.sagemaker.sparksdk.transformation.serializers.ProtobufRequestRowSerializer
import com.amazonaws.services.sagemaker.sparksdk.transformation.deserializers.KMeansProtobufResponseRowDeserializer

val estimator = new SageMakerEstimator(
  trainingImage =
    "811284229777.dkr.ecr.us-east-1.amazonaws.com/kmeans:1",
  modelImage =
    "811284229777.dkr.ecr.us-east-1.amazonaws.com/kmeans:1",
  requestRowSerializer = new ProtobufRequestRowSerializer(),
  responseRowDeserializer = new KMeansProtobufResponseRowDeserializer(),
  hyperParameters = Map("k" -> "10", "feature_dim" -> "784"),
  sagemakerRole = IAMRole(roleArn),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1,
  trainingSparkDataFormat = "sagemaker")
```

Nel codice, i parametri nel costruttore `SageMakerEstimator` includono:
+ `trainingImage`: individua il percorso di registro Docker dell'immagine di addestramento contente il codice personalizzato.
+ `modelImage`: individua il percorso di registro Docker dell'immagine contente il codice di interferenza.
+ `requestRowSerializer`: implementa `com.amazonaws.services.sagemaker.sparksdk.transformation.RequestRowSerializer`.

  Questo parametro serializza le righe nell'input `DataFrame` per inviarle al modello ospitato in SageMaker AI per l'inferenza.
+ `responseRowDeserializer`: implementa 

  `com.amazonaws.services.sagemaker.sparksdk.transformation.ResponseRowDeserializer`.

  Questo parametro deserializza le risposte dal modello, ospitato in AI, in SageMaker un. `DataFrame`
+ `trainingSparkDataFormat`: specifica il formato dei dati utilizzato da Spark durante il caricamento dei dati di addestramento da un `DataFrame` in S3. Ad esempio, `"sagemaker"` per il formato protobuf, `"csv"` per i valori separati da virgola e `"libsvm"` per il formato LibSVM. 

Puoi implementare valori personalizzati per `RequestRowSerializer` e `ResponseRowDeserializer` per serializzare e deserializzare le righe da un formato dei dati supportato dal codice di inferenza, come libsvm o .csv.

# Utilizzali in una pipeline SageMakerEstimator Spark
<a name="apache-spark-example1-extend-pipeline"></a>

Puoi utilizzare gli strumenti di valutazione `org.apache.spark.ml.Estimator` e i modelli `org.apache.spark.ml.Model` e gli strumenti di valutazione `SageMakerEstimator` e i modelli `SageMakerModel` nelle pipeline `org.apache.spark.ml.Pipeline`, come mostrato nel seguente esempio:

```
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.feature.PCA
import org.apache.spark.sql.SparkSession
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.algorithms
import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator

val spark = SparkSession.builder.getOrCreate

// load mnist data as a dataframe from libsvm
val region = "us-east-1"
val trainingData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
val testData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")

// substitute your SageMaker IAM role here
val roleArn = "arn:aws:iam::account-id:role/rolename"

val pcaEstimator = new PCA()
  .setInputCol("features")
  .setOutputCol("projectedFeatures")
  .setK(50)

val kMeansSageMakerEstimator = new KMeansSageMakerEstimator(
  sagemakerRole = IAMRole(integTestingRole),
  requestRowSerializer =
    new ProtobufRequestRowSerializer(featuresColumnName = "projectedFeatures"),
  trainingSparkDataFormatOptions = Map("featuresColumnName" -> "projectedFeatures"),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1)
  .setK(10).setFeatureDim(50)

val pipeline = new Pipeline().setStages(Array(pcaEstimator, kMeansSageMakerEstimator))

// train
val pipelineModel = pipeline.fit(trainingData)

val transformedData = pipelineModel.transform(testData)
transformedData.show()
```

Il parametro `trainingSparkDataFormatOptions` configura Spark per serializzare in protobuf la colonna "projectedFeatures" per l’addestramento del modello. Inoltre, per impostazione predefinita Spark serializza in protobuf la colonna "label".

Poiché vogliamo che le inferenze utilizzino la colonna "projectedFeatures", passiamo il nome della colonna al `ProtobufRequestRowSerializer`.

Il seguente esempio mostra un `DataFrame` trasformato:

```
+-----+--------------------+--------------------+-------------------+---------------+
|label|            features|   projectedFeatures|distance_to_cluster|closest_cluster|
+-----+--------------------+--------------------+-------------------+---------------+
|  5.0|(784,[152,153,154...|[880.731433034386...|     1500.470703125|            0.0|
|  0.0|(784,[127,128,129...|[1768.51722024166...|      1142.18359375|            4.0|
|  4.0|(784,[160,161,162...|[704.949236329314...|  1386.246826171875|            9.0|
|  1.0|(784,[158,159,160...|[-42.328192193771...| 1277.0736083984375|            5.0|
|  9.0|(784,[208,209,210...|[374.043902028333...|   1211.00927734375|            3.0|
|  2.0|(784,[155,156,157...|[941.267714528850...|  1496.157958984375|            8.0|
|  1.0|(784,[124,125,126...|[30.2848596410594...| 1327.6766357421875|            5.0|
|  3.0|(784,[151,152,153...|[1270.14374062052...| 1570.7674560546875|            0.0|
|  1.0|(784,[152,153,154...|[-112.10792566485...|     1037.568359375|            5.0|
|  4.0|(784,[134,135,161...|[452.068280676606...| 1165.1236572265625|            3.0|
|  3.0|(784,[123,124,125...|[610.596447285397...|  1325.953369140625|            7.0|
|  5.0|(784,[216,217,218...|[142.959601818422...| 1353.4930419921875|            5.0|
|  3.0|(784,[143,144,145...|[1036.71862533658...| 1460.4315185546875|            7.0|
|  6.0|(784,[72,73,74,99...|[996.740157435754...| 1159.8631591796875|            2.0|
|  1.0|(784,[151,152,153...|[-107.26076167417...|   960.963623046875|            5.0|
|  7.0|(784,[211,212,213...|[619.771820430940...|   1245.13623046875|            6.0|
|  2.0|(784,[151,152,153...|[850.152101817161...|  1304.437744140625|            8.0|
|  8.0|(784,[159,160,161...|[370.041887230547...| 1192.4781494140625|            0.0|
|  6.0|(784,[100,101,102...|[546.674328209335...|    1277.0908203125|            2.0|
|  9.0|(784,[209,210,211...|[-29.259112927426...| 1245.8182373046875|            6.0|
+-----+--------------------+--------------------+-------------------+---------------+
```

# Risorse per l'utilizzo di esempi di SageMaker AI Spark for Python (PySpark)
<a name="apache-spark-additional-examples"></a>

Amazon SageMaker AI fornisce una libreria Python ([SageMaker AI PySpark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-pyspark-sdk)) Apache Spark che puoi utilizzare per integrare le tue applicazioni Apache Spark con l'intelligenza artificiale. SageMaker Questo argomento contiene esempi per aiutarti a iniziare. PySpark Per informazioni sulla libreria SageMaker AI Apache Spark, consulta. [Apache Spark con Amazon AI SageMaker](apache-spark.md)

**Scarica PySpark**

Puoi scaricare il codice sorgente per entrambe le librerie Python Spark (PySpark) e Scala dal repository [SageMaker AI](https://github.com/aws/sagemaker-spark) Spark. GitHub

[Per istruzioni sull'installazione della libreria SageMaker AI Spark, usa una delle seguenti opzioni o visita AI. SageMaker PySpark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-pyspark-sdk)
+ esegui l’installazione con pip:

  ```
  pip install sagemaker_pyspark
  ```
+ Installa dall’origine:

  ```
  git clone git@github.com:aws/sagemaker-spark.git
  cd sagemaker-pyspark-sdk
  python setup.py install
  ```
+ Puoi anche creare un nuovo notebook in un’istanza del notebook che utilizza il kernel `Sparkmagic (PySpark)` o `Sparkmagic (PySpark3)`, quindi connetterti a un cluster Amazon EMR remoto.
**Nota**  
Il cluster Amazon EMR deve essere configurato con un ruolo IAM con la policy `AmazonSageMakerFullAccess` collegata. Per informazioni sulla configurazione dei ruoli per un cluster EMR, consulta [Configurare ruoli IAM per autorizzazioni EMR a servizi AWS](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html) nella *Guida alla gestione di Amazon EMR*.

**PySpark esempi**

Per esempi sull'utilizzo dell' SageMaker intelligenza artificiale PySpark, vedi:
+ [Utilizzo di Amazon SageMaker AI con Apache Spark](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-spark/index.html) in Read the Docs.
+ [SageMaker Repository AI Spark](https://github.com/aws/sagemaker-spark). GitHub