Introduzione a Oracle Cloud Infrastructure Data Flow

Questa esercitazione ti presenta Oracle Cloud Infrastructure Data Flow, un servizio che ti consente di eseguire qualsiasi applicazione Spark Apache su qualsiasi scala senza alcuna infrastruttura da distribuire o gestire.

Se hai già utilizzato Spark, otterrai di più da questa esercitazione, ma non sono necessarie conoscenze Spark precedenti. Tutte le applicazioni e i dati Spark sono stati forniti per te. Questa esercitazione descrive in che modo Data Flow rende l'esecuzione delle applicazioni Spark facile, ripetibile, sicura e semplice da condividere in tutta l'azienda.

In questa esercitazione:
  1. Come utilizzare Java per eseguire ETL in un'applicazione di Data Flow.
  2. Come utilizzare SparkSQL in un'applicazione SQL.
  3. Come creare ed eseguire un'applicazione Python per eseguire un semplice task di Machine Learning.

Puoi anche eseguire questa esercitazione utilizzando spark-submit da CLI o utilizzando spark-submit e Java SDK.

Vantaggi del flusso di dati
Ecco perché Data Flow è meglio che eseguire i propri cluster Spark o altri servizi Spark là fuori.
  • È serverless, il che significa che non hai bisogno di esperti per eseguire il provisioning, applicare patch, aggiornare o gestire i cluster Spark. Ciò significa che ti concentri sul tuo codice Spark e nient'altro.
  • Ha operazioni e tuning semplici. L'accesso all'interfaccia utente di Spark è di sola selezione ed è regolato dai criteri di autorizzazione IAM. Se un utente si lamenta che un job è troppo lento, chiunque abbia accesso all'esecuzione può aprire l'interfaccia utente di Spark e arrivare alla causa principale. L'accesso al server della cronologia Spark è semplice per i job già eseguiti.
  • È ottimo per l'elaborazione in batch. L'output dell'applicazione viene acquisito e reso disponibile automaticamente dalle API REST. È necessario eseguire un job Spark SQL di quattro ore e caricare i risultati nel sistema di gestione della pipeline? In Data Flow, mancano solo due chiamate API REST.
  • Ha un controllo consolidato. Data Flow offre una vista consolidata di tutte le applicazioni Spark, chi le sta eseguendo e quanto consumano. Vuoi sapere quali applicazioni stanno scrivendo più dati e chi li sta eseguendo? Ordina semplicemente in base alla colonna Dati scritti. Un job è in esecuzione da troppo tempo? Chiunque disponga delle autorizzazioni IAM corrette può visualizzare il job e arrestarlo.
Esempio di lista di esecuzioni. C'è una tabella di nove colonne e tre righe. Le colonne sono Nome, Lingua, Stato, Proprietario, Creato, Durata, Totale oCPU, Lettura dati, Dati scritti. Le celle in tutte e tre le righe sono tutte popolate. I nomi sono Esercitazione Esempio 1, Esercitazione Esempio 2 e Esercitazione Esempio 3. I linguaggi per ciascuno sono rispettivamente Java, Python e SQL. Tutti e tre hanno uno stato di successo.

Informazioni preliminari

Per eseguire correttamente questa esercitazione, è necessario disporre di Imposta tenancy e di Accedi a Data Flow.

Impostazione della tenancy

Per poter eseguire Data Flow, è necessario concedere autorizzazioni che consentano un'acquisizione e una gestione efficaci dei log. Vedere la sezione Imposta amministrazione del manuale Data Flow Service Guide e seguire le istruzioni fornite.

Accesso al flusso di dati
  1. Dalla console, selezionare il menu di navigazione per visualizzare la lista dei servizi disponibili.
  2. Selezionare Analytics e AI.
  3. In Big Data selezionare Flusso di dati.
  4. Selezionare Applicazioni.

1. ETL con Java

Esercitazione per imparare a creare un'applicazione Java in Data Flow

I passi riportati di seguito consentono di utilizzare l'interfaccia utente della console. Puoi completare questo esercizio utilizzando spark-submit dall'interfaccia CLI o spark-submit con Java SDK.

panoramica

Il primo passo più comune nelle applicazioni di elaborazione dei dati è quello di prendere i dati da qualche fonte e metterli in un formato adatto per il reporting e altre forme di analisi. In un database è possibile caricare un file sequenziale nel database e creare indici. In Spark, il primo passo è pulire e convertire i dati da un formato di testo in formato Parquet. Parquet è un formato binario ottimizzato che supporta letture efficienti, rendendolo ideale per il reporting e l'analisi. In questo esercizio, prendi i dati di origine, convertili in Parquet e poi fai alcune cose interessanti con esso. Il set di dati è il set di dati di Berlino Airbnb, scaricato dal sito Web Kaggle sotto i termini della licenza Creative Commons CC0 1.0 Universal (CC0 1.0) "Public Domain Dedication".

C'è una casella denominata Dati CSV, Facile da leggere, Lento. Una freccia scorre in una casella sulla destra denominata Parquet, Harder to Read, Fast. Da lì ci sono due frecce, una a una casella denominata Query SQL e l'altra a una casella denominata Machine Learning.

I dati vengono forniti in formato CSV e il primo passo è convertire questi dati in Parquet e memorizzarli nell'area di memorizzazione degli oggetti per l'elaborazione a valle. Per eseguire questa conversione viene fornita un'applicazione Spark, denominata oow-lab-2019-java-etl-1.0-SNAPSHOT.jar. L'obiettivo è creare un'applicazione di flusso dati che esegua questa applicazione Spark ed eseguirla con i parametri corretti. Poiché si sta iniziando, questo esercizio guida passo dopo passo e fornisce i parametri necessari. Successivamente devi fornire i parametri da solo, quindi devi capire cosa stai entrando e perché.

Creare l'applicazione Java

Crea un'applicazione Java di Data Flow dalla console o con Spark-submit dalla riga di comando o utilizzando l'SDK.

Creare l'applicazione Java nella console.

Creare un'applicazione Java in Data Flow dalla console.

Creare un'applicazione Data Flow.

  1. Andare al servizio Flusso dati nella console espandendo il menu hamburger in alto a sinistra e scorrendo verso il basso.
  2. Evidenziare Data Flow, quindi selezionare Applicazioni. Selezionare un compartimento in cui si desidera creare le applicazioni di Data Flow. Infine, selezionare Crea applicazione. Applicazione SelectCreate
  3. Selezionare Applicazione Java e immettere un nome per l'applicazione, ad esempio Tutorial Example 1. La pagina Applicazione viene visualizzata con il pull-out Crea applicazione sul lato destro. Nella parte superiore si trova una sezione denominata Informazioni generali contenente un campo di testo denominato Nome e un campo di testo denominato Descrizione. Viene quindi visualizzata una sezione denominata Configurazione risorsa in cui sono visibili due campi di testo. Nella parte inferiore sono disponibili tre pulsanti: Crea, Salva come stack e Annulla.
  4. Scorrere fino a Configurazione risorsa. Lasciare l'impostazione predefinita per tutti questi valori. La pagina Applicazione visualizzata con il pull-out Crea applicazione sul lato destro. La sezione Configurazione risorsa è visibile. In alto c'è un elenco a discesa chiamato Spark Version. Spark 3.0.2 è selezionato, ma sono elencati anche Spark 2.4.4 e Spark 3.2.1. Di seguito, ma parzialmente nascosto dalla lista delle versioni Spark è un campo di testo chiamato Seleziona un pool. Quindi è un campo di testo chiamato Forma driver. VM.Standard.E4. Flexfield selezionato. Di seguito e parzialmente ritagliata è una sezione per personalizzare il numero di OCPU. Nella parte inferiore sono disponibili tre pulsanti: Crea, Salva come stack e Annulla.
  5. Scorrere fino a Configurazione applicazione. Configurare l'applicazione come indicato di seguito.
    1. URL file: la posizione del file JAR nello storage degli oggetti. La posizione per questa applicazione è:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. Nome classe principale: le applicazioni Java richiedono un nome classe principale che dipende dall'applicazione. Per questo esercizio, inserire
      convert.Convert
    3. Argomenti: l'applicazione Spark prevede due parametri della riga di comando, uno per l'input e uno per l'output. Nel campo Argomenti immettere
      ${input} ${output}
      Viene richiesto di immettere i valori predefiniti. È consigliabile immetterli ora.
    La pagina Applicazione visualizzata con il pull-out Crea applicazione nella sezione Configurazione applicazione side.The a destra è visibile. Nella parte superiore c'è una sezione chiamata Seleziona un file. Una casella di controllo con etichetta Immettere manualmente l'URL del file. Successivamente è presente un campo di testo denominato URL file. Viene popolato con il percorso del file .jar. Di seguito è riportato un campo di testo denominato Nome classe principale. Viene popolato con convert.Convert. Di seguito è riportato un campo di testo denominato Argomenti. Viene popolato con ${input} ${output}.
  6. Gli argomenti di input e output sono:
    1. Input:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
    2. Output:
      oci://<yourbucket>@<namespace>/optimized_listings

    Verificare che la configurazione dell'applicazione sia simile a quella indicata di seguito. La pagina Applicazione visualizzata con il pull-out Crea applicazione sul lato destro. La sezione Configurazione applicazione è visibile. Esiste un campo di testo denominato Argomenti. Viene popolato con ${input} ${output}. Di seguito sono riportati i campi di testo per i parametri. Ci sono due a sinistra che sono disattivati e popolati rispettivamente con input e output. Accanto a ciascun campo è presente un campo di testo denominato Valore predefinito che viene popolato con le rispettive directory. Di seguito è riportata una sezione denominata URI archivio.

    Nota

    È necessario personalizzare il percorso di output in modo che punti a un bucket nel tenant.
  7. Al termine, selezionare Crea. Quando l'applicazione viene creata, viene visualizzata nell'elenco Applicazione. La pagina Applicazioni. Nell'elenco delle applicazioni è presente una sola applicazione. È composto da sette colonne, Nome, Lingua, Versione Spark, Tipo di applicazione, Proprietario, Creato e Aggiornato. Il nome contiene l'esercitazione Esempio 1. La lingua è impostata su Java. La versione Spark è impostata sulla versione 3.2.1. Tipo di applicazione impostato su Batch. Gli altri campi vengono popolati in base a chi ha creato l'applicazione, alla data di creazione e all'ultimo aggiornamento (che in questo caso è la stessa data e ora di creazione).

Complimenti. La prima applicazione di flusso dati è stata creata. Ora è possibile eseguirlo.

Creare l'applicazione Java mediante Spark-Submit e CLI

Utilizza spark-submit e CLI per creare un'applicazione Java.

  1. Impostare la tenancy.
  2. Se non si dispone di un bucket nello storage degli oggetti in cui è possibile salvare l'input e i risultati, è necessario creare un bucket con una struttura di cartelle appropriata. In questo esempio, la struttura delle cartelle è /output/tutorial1.
  3. Esegui questo codice:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_1_ETL_Java \
    --execute '
        --class convert.Convert 
        --files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv 
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar \
        kaggle_berlin_airbnb_listings_summary.csv oci://<bucket-name>@<namespace-name>/output/tutorial1'
    Se si è già eseguito questo tutorial, eliminare il contenuto della directory di output, oci://<bucket-name>@<namespace-name>/output/tutorial1, per evitare che l'esercitazione non riesca.
    Nota

    Per trovare l'ID compartimento, nel menu di navigazione selezionare Identità e selezionare Compartimenti. I compartimenti disponibili sono elencati, incluso l'OCID di ciascuno.
Creare l'applicazione Java mediante Spark-Submit e SDK

Completa l'esercitazione per creare un'applicazione Java in Data Flow utilizzando spark-submit e Java SDK.

Questi sono i file per eseguire questo esercizio e sono disponibili nei seguenti URI di storage degli oggetti pubblici:

  • File di input in formato CSV:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
  • File JAR:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
  1. Crea un bucket nello storage degli oggetti in cui puoi salvare l'input e i risultati.
  2. Esegui questo codice:
    public class Tutorial1 {
     
      String compartmentId = "<your-compartment_id>"; // Might need to change comapartment id
     
      public static void main(String[] ars) throws IOException {
        System.out.println("ETL with JAVA Tutorial");
        new Tutorial1().crateRun();
      }
     
      public void crateRun() throws IOException {
     
        // Authentication Using BOAT config from ~/.oci/config file
        final ConfigFileReader.ConfigFile configFile = ConfigFileReader.parseDefault();
     
        final AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        // Creating a Data Flow Client
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
        client.setEndpoint("http://<IP_address>:443");   // Might need to change endpoint
     
        // creation of execute String
        String executeString = "--class convert.Convert "
            + "--files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv "
            + "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar "
            + "kaggle_berlin_airbnb_listings_summary.csv oci://<bucket_name>@<tenancy_name>/output/tutorial1";
     
        // Create Run details and create run.
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_1_ETL_with_JAVA").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
        GetRunRequest grq = GetRunRequest.builder().opcRequestId(response.getOpcRequestId()).runId(response.getRun().getId()).build();
        GetRunResponse gr = client.getRun(grq);
     
        System.out.println("Run Created!");
     
      }
    }
Eseguire l'applicazione Java Data Flow

Dopo aver creato un'applicazione Java, è possibile eseguirla.

  1. Se i passi sono stati eseguiti con precisione, è sufficiente evidenziare l'applicazione nell'elenco, selezionare il menu Azioni e selezionare Esegui.
  2. È possibile personalizzare i parametri prima di eseguire l'applicazione. Nel tuo caso, hai inserito i valori precisi in anticipo e puoi iniziare a eseguire facendo clic su Esegui. Pagina di estrazione Esegui applicazione Java visualizzata sul lato destro della pagina Applicazioni. Nella parte superiore è presente un elenco a discesa denominato Driver Shape; VM.Standard2.1 (15 GB, 1 OCPU) è selezionato. Di seguito è riportato un elenco a discesa denominato Forma esecutore; è selezionato VM.Standard2.1 (15 GB, 1 OCPU). Di seguito è riportato un campo di testo denominato Numero di esecutori; contiene 1. Di seguito è riportato un campo di testo denominato Argomenti. È disattivato e contiene ${input} ${output}. Di seguito sono riportati due campi di testo affiancati per i parametri. Il primo si chiama Nome ed è disattivato, ma contiene input. L'altro è denominato Valore predefinito e contiene la directory di input, ma può essere modificato. C'è una barra di scorrimento a destra che si trova nella posizione superiore. In fondo alla schermata ci sono due pulsanti, Run e Cancel. L'esecuzione sta per essere cliccata.
  3. Durante l'esecuzione dell'applicazione, è possibile caricare facoltativamente l'interfaccia utente di Spark per monitorare lo stato di avanzamento. Dal menu Azioni per l'esecuzione in questione, selezionare Interfaccia utente Spark. La pagina Applicazioni con l'esempio di esercitazione 1 è l'unica applicazione elencata. È stato fatto clic sul menu kebab alla fine della riga nell'elenco e viene visualizzato Visualizza dettagli, Modifica, Esegui, Aggiungi tag, Visualizza tag ed Elimina. Si sta per fare clic sull'interfaccia utente Spark.

  4. Si viene reindirizzati automaticamente all'interfaccia utente di Apache Spark, utile per il debug e l'ottimizzazione delle prestazioni.L'interfaccia utente Spark con un grafico degli esecutori, quando sono stati aggiunti o rimossi, e i job, quando sono in esecuzione e se sono riusciti o non riusciti. Sono codificati a colori. Di seguito è riportata una tabella di job attivi, di sei colonne. Le colonne sono ID job, Descrizione, Inviato, Durata, Fasi: Riuscito/Totale e Task (per le fasi): Riuscito/Totale.
  5. Dopo circa un minuto in Esegui viene visualizzato il completamento riuscito con lo stato Succeeded: Viene visualizzata la pagina Esecuzioni con due esecuzioni, Esempio di esercitazione 1 ed Esempio di esercitazione 2. La tabella delle esecuzioni ha nove colonne. Sono Nome, Lingua, Stato, Proprietario, Creato, Durata, Totale oCPU, Lettura dati e Dati scritti. Lo stato dell'esempio di esercitazione 1 è Riuscito.

  6. Eseguire il drill-down dell'esecuzione per visualizzare ulteriori dettagli e scorrere fino alla parte inferiore per visualizzare un elenco di log. La parte inferiore della pagina Dettagli esecuzione contenente una sezione denominata Log. Esiste una tabella di cinque colonne contenente due file di log. Le colonne sono Nome, Dimensione file, Origine, Tipo e Creato. Sono presenti un file stdout.log e un file stderr.log. Nel menu a sinistra della sezione Log è presente una sezione denominata Risorse. Contiene i log (evidenziati in base alla selezione) e le esecuzioni correlate.

  7. Quando si seleziona il file spark_application_stdout.log.gz, viene visualizzato l'output del log, Conversion was successful: C'è una pagina vuota, con un po 'di testo nella parte superiore. Conversione del testo completata.

  8. Inoltre, puoi passare al bucket di storage degli oggetti di output per confermare che i nuovi file sono stati creati. Viene visualizzata la sezione Oggetti. Sono disponibili tre pulsanti: Carica oggetti, Ripristina ed Elimina. Solo il primo è attivo. Di seguito è riportata una tabella di quattro colonne, Nome, Dimensione, Stato e Creato. Vengono elencati gli oggetti disponibili.

    Questi nuovi file vengono utilizzati da applicazioni successive. Assicurati di poterli vedere nel tuo secchio prima di passare agli esercizi successivi.

2. SparkSQL semplificato

In questo esercizio viene eseguito uno script SQL per eseguire il profiling di base di un data set.

Questo esercizio utilizza l'output generato in 1. ETL con Java. Devi averlo completato con successo prima di poter provare questo.

I passi riportati di seguito consentono di utilizzare l'interfaccia utente della console. Puoi completare questo esercizio utilizzando spark-submit dall'interfaccia CLI o spark-submit con Java SDK.

panoramica

Come con altre applicazioni di flusso dati, i file SQL vengono memorizzati nello storage degli oggetti e potrebbero essere condivisi tra molti utenti SQL. A tale scopo, Data Flow consente di parametrizzare gli script SQL e personalizzarli in fase di esecuzione. Come con altre applicazioni, è possibile fornire valori predefiniti per i parametri che spesso fungono da preziosi indizi per chi esegue questi script.

Lo script SQL è disponibile per l'uso direttamente nell'applicazione Data Flow. Non è necessario crearne una copia. La sceneggiatura è qui riprodotta per illustrare alcuni punti.

Testo di riferimento dello script SparkSQL: Codice SparkSQL di esempio.

Punti salienti importanti:
  1. Lo script inizia creando le tabelle SQL necessarie. Attualmente, Data Flow non dispone di un catalogo SQL persistente, pertanto tutti gli script devono iniziare definendo le tabelle necessarie.
  2. La posizione della tabella è impostata su ${location} Si tratta di un parametro che l'utente deve fornire in fase di esecuzione. In questo modo, Data Flow ha la flessibilità di utilizzare uno script per elaborare più posizioni diverse e condividere il codice tra utenti diversi. Per questo laboratorio, dobbiamo personalizzare ${location} per puntare alla posizione di output che abbiamo usato nell'Esercizio 1
  3. Come vedremo, l'output dello script SQL viene acquisito e reso disponibile sotto l'Esegui.
Creare un'applicazione SQL
  1. In Flusso dati creare un'applicazione SQL, selezionare SQL come tipo e accettare le risorse predefinite. Nella pagina di estrazione Crea applicazione che copre il lato destro della pagina Applicazioni, è disponibile una sezione denominata Configurazione applicazione. Le caselle di controllo, streaming Spark e Usa opzioni Spark-Submit non sono selezionate. Sotto un'etichetta denominata Lingua, sono presenti quattro pulsanti di opzione. L'istruzione SQL è selezionata come lingua.
  2. In Configurazione applicazione, configurare l'applicazione SQL come indicato di seguito.
    1. URL file: la posizione del file SQL nello storage degli oggetti. La posizione per questa applicazione è:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_sparksql_report.sql
    2. Argomenti: lo script SQL prevede un parametro, ovvero la posizione dell'output del passo precedente. Selezionare Aggiungi parametro e immettere un parametro denominato location con il valore utilizzato come percorso di output nel passo a, in base al modello
      oci://[bucket]@[namespace]/optimized_listings

    Al termine, verificare che la configurazione dell'applicazione abbia un aspetto simile al seguente:

    Nella pagina di estrazione Crea applicazione che copre il lato destro della pagina Applicazioni, è visibile la sezione Configurazione applicazione. È presente una casella di controllo Usa opzioni Spark-Sottometti, non selezionata. In Lingua sono presenti quattro pulsanti di opzione, SQL è selezionato. È disponibile una sezione denominata Selezionare un file. La casella di controllo Immettere manualmente l'URL del file è selezionata. C'è una casella di testo, denominata File URL, che contiene il collegamento al file .sql. Di seguito sono riportate due caselle di testo affiancate nella sezione secondaria Parametri. Il primo è denominato Nome, contiene la posizione. Il secondo è denominato Valore e contiene il percorso di una directory.

  3. Personalizzare il valore della posizione in un percorso valido nella tenancy.
Eseguire un'applicazione SQL
  1. Salvare l'applicazione ed eseguirla dalla lista Applicazioni. La pagina Applicazioni con le due applicazioni create finora in questa esercitazione in ordine cronologico inverso. La tabella che elenca le applicazioni contiene cinque colonne: Nome, Lingua, Proprietario, Creato e Aggiornato. Alla fine di ogni riga c'è un menu kebab. Per Esercitazione Esempio 2, è stato fatto clic sul menu kebab e vengono visualizzate le opzioni. Sono Visualizza dettagli, Modifica, Esegui, Aggiungi tag, Visualizza tag ed Elimina. L'esecuzione sta per essere cliccata.
  2. Al termine dell'esecuzione, aprire l'esecuzione: La pagina Esecuzioni con le due applicazioni create finora in questa esercitazione in ordine cronologico inverso. Ognuno ha avuto una sola corsa. La tabella che elenca le applicazioni contiene nove colonne, Nome, Lingua, Stato, Proprietario, Creato, Durata, Totale oCPU, Lettura dati e Dati scritti. Lo stato dell'esempio di esercitazione 2 è Riuscito e le altre celle della tabella vengono popolate.
  3. Passare ai log di esecuzione: La parte inferiore della pagina Dettagli esecuzione. Di seguito sono riportati i dettagli di una sezione denominata Log. Elenca i file di log disponibili in una tabella di cinque colonne. Le colonne sono Nome, Dimensione file, Origine, Tipo e Creato. I due file di log elencati sono stdout.log e stderr.log. A sinistra si trova una piccola sezione denominata Risorse. Contiene due collegamenti, Log e Risorse. Log selezionati.
  4. Aprire spark_application_stdout.log.gz e verificare che l'output sia conforme all'output riportato di seguito.
    Nota

    Le righe potrebbero essere in un ordine diverso da quello dell'immagine, ma i valori devono essere in linea.
    Output del file spark_application_stdout.log.gz. Esistono cinque colonne di dati. Le colonne sono senza nome e non hanno una larghezza coerente. La prima colonna contiene testo, le altre contengono numeri.
  5. Sulla base del tuo profilo SQL, puoi concludere che, in questo set di dati, Neukolln ha il prezzo di listino medio più basso a $ 46,57, mentre Charlottenburg-Wilmersdorf ha la media più alta a $ 114,27 (Nota: il set di dati di origine ha prezzi in USD anziché in EUR).

Questo esercizio ha mostrato alcuni aspetti chiave del flusso di dati. Quando è presente un'applicazione SQL, chiunque può eseguirla facilmente senza preoccuparsi della capacità del cluster, dell'accesso e della conservazione dei dati, della gestione delle credenziali o di altre considerazioni sulla sicurezza. Ad esempio, un analista aziendale può utilizzare facilmente i report basati su Spark con Data Flow.

3. Machine Learning con PySpark

Utilizzare PySpark per eseguire un semplice task di apprendimento automatico sui dati di input.

Questo esercizio utilizza l'output di 1. ETL con Java come dati di input. Devi aver completato con successo il primo esercizio prima di poter provare questo. Questa volta, il tuo obiettivo è quello di identificare le migliori occasioni tra i vari annunci Airbnb utilizzando gli algoritmi di machine learning Spark.

I passi riportati di seguito consentono di utilizzare l'interfaccia utente della console. Puoi completare questo esercizio utilizzando spark-submit dall'interfaccia CLI o spark-submit con Java SDK.

panoramica

È disponibile un'applicazione PySpark da utilizzare direttamente nelle applicazioni di flusso dati. Non è necessario creare una copia.

Il testo di riferimento dello script PySpark viene fornito qui per illustrare alcuni punti: Codice PySpark di esempio.

Alcune osservazioni di questo codice:
  1. Lo script Python prevede un argomento della riga di comando (evidenziato in rosso). Quando si crea l'applicazione Flusso dati, è necessario creare un parametro con il quale l'utente imposta il percorso di input.
  2. Lo script utilizza la regressione lineare per prevedere un prezzo per listino e trova le occasioni migliori sottraendo il prezzo di listino dalla previsione. Il valore più negativo indica il valore migliore, per modello.
  3. Il modello in questo script è semplificato e considera solo il metraggio quadrato. In un ambiente reale si userebbero più variabili, come il quartiere e altre importanti variabili predittive.
Creare un'applicazione PySpark

Crea un'applicazione PySpark dalla console o con Spark-submit dalla riga di comando o utilizzando l'SDK.

Apprendimento automatico con PySpark mediante la console

Creare un'applicazione PySpark in Data Flow utilizzando la console.

  1. Creare un'applicazione e selezionare il tipo Python.
    Nella pagina di estrazione Crea applicazione, Python viene selezionato come linguaggio.
  2. In Configurazione applicazione, configurare l'applicazione come indicato di seguito.
    1. URL file: la posizione del file Python nello storage degli oggetti. La posizione per questa applicazione è:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py
    2. Argomenti: l'applicazione Spark prevede due parametri della riga di comando, uno per l'input e uno per l'output. Nel campo Argomenti immettere
      ${location}
      . Viene richiesto di immettere un valore predefinito. Immettere il valore utilizzato come percorso di output nel passo a del modello:
      oci://<bucket>@<namespace>/optimized_listings
  3. Verificare la configurazione dell'applicazione e verificare che sia simile alla seguente:
    Nella pagina di estrazione Crea applicazione che copre il lato destro della pagina Applicazioni, la sezione Configurazione applicazione è visibile. È presente una casella di controllo denominata Usa opzioni di invio Spark, che non è selezionata. Python è selezionato come linguaggio. Esiste una casella di testo, denominata URL file, che contiene il collegamento al file .py. Di seguito è riportata un'altra casella di testo, denominata Argomenti, contenente ${location}. Di seguito sono riportate due caselle di testo affiancate nella sottosezione Parametri. Il primo è disattivato e contiene la posizione. Il secondo contiene il percorso di una directory.
  4. Personalizzare il valore della posizione in un percorso valido nella tenancy.
Machine Learning con PySpark utilizzando Spark-Submit e CLI

Crea un'applicazione PySpark in Data Flow utilizzando Spark-submit e CLI.

  1. Esercizio completo Crea l'applicazione Java utilizzando Spark-Submit e CLI, prima di provare questo esercizio. I risultati vengono utilizzati in questo esercizio.
  2. Eseguire il seguente codice:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_3_PySpark_ML \
    --execute '
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py 
        oci://<your_bucket>@<namespace-name>/output/tutorial1'
Machine Learning con PySpark utilizzando Spark-Submit e SDK

Crea un'applicazione PySpark in Data Flow utilizzando Spark-submit e SDK.

  1. Completa l'esercizio Creare l'applicazione Java utilizzando Spark-Submit e SDK, prima di provare questo esercizio. I risultati vengono utilizzati in questo esercizio.
  2. Eseguire il seguente codice:
    public class PySParkMLExample {
     
      private static Logger logger = LoggerFactory.getLogger(PySParkMLExample.class);
      String compartmentId = "<compartment-id>"; // need to change comapartment id
     
      public static void main(String[] ars){
        System.out.println("ML_PySpark Tutorial");
        new PySParkMLExample().createRun();
      }
     
      public void createRun(){
     
        ConfigFileReader.ConfigFile configFile = null;
        // Authentication Using config from ~/.oci/config file
        try {
          configFile = ConfigFileReader.parseDefault();
        }catch (IOException ie){
          logger.error("Need to fix the config for Authentication ", ie);
          return;
        }
     
        try {
        AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
     
        String executeString = "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py oci://<bucket-name>@<namespace-name>/output/optimized_listings";
     
        CreateRunResponse response;
     
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_3_ML_PySpark").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
     
        logger.info("Successful run creation for ML_PySpark with OpcRequestID: "+response.getOpcRequestId()
            +" and Run ID: "+response.getRun().getId());
     
        }catch (Exception e){
          logger.error("Exception creating run for ML_PySpark ", e);
        }
     
     
      }
    }
Eseguire un'applicazione PySpark
  1. Eseguire l'applicazione dalla lista di applicazioni. La pagina Applicazioni con le tre applicazioni create in questa esercitazione in ordine cronologico inverso. La tabella che elenca le applicazioni contiene cinque colonne: Nome, Lingua, Proprietario, Creato e Aggiornato. Alla fine di ogni riga c'è un menu kebab. Per Esercitazione Esempio 3, è stato fatto clic sul menu kebab e vengono visualizzate le opzioni. Sono Visualizza dettagli, Modifica, Esegui, Aggiungi tag, Visualizza tag ed Elimina. L'esecuzione sta per essere cliccata.
  2. Al termine dell'esecuzione, aprirla e andare ai log. La parte inferiore della pagina Dettagli esecuzione. Di seguito sono riportati i dettagli di una sezione denominata Log. Elenca i file di log disponibili in una tabella di cinque colonne. Le colonne sono Nome, Dimensione file, Origine, Tipo e Creato. I due file di log elencati sono stdout.log e stderr.log. A sinistra si trova una piccola sezione denominata Risorse. Contiene due collegamenti, Log e Risorse. Log selezionati.

  3. Aprire il file spark_application_stdout.log.gz. L'output deve essere identico al seguente: Output del file spark_application_stdout.log.gz. C'è una tabella di sei colonne. Le colonne sono ID, nome, funzioni, prezzo, previsione e valore. Vengono visualizzate solo le prime venti righe. Tutte le celle vengono popolate.
  4. Da questo output, si vede che l'elenco ID 690578 è il miglior affare con un prezzo previsto di $ 313,70, rispetto al prezzo di listino di $ 35,00 con filmati quadrati elencati di 4639 piedi quadrati. Se sembra un po' troppo bello per essere vero, l'ID univoco significa che puoi scavare nei dati, per capire meglio se è davvero il furto del secolo. Ancora una volta, un analista aziendale potrebbe facilmente utilizzare l'output di questo algoritmo di machine learning per promuovere la loro analisi.

Pagina successiva

Ora puoi creare ed eseguire applicazioni Java, Python o SQL con Data Flow ed esplorare i risultati.

Data Flow gestisce tutti i dettagli di distribuzione, eliminazione, gestione dei log, sicurezza e accesso all'interfaccia utente. Data Flow ti consente di sviluppare applicazioni Spark senza preoccuparti dell'infrastruttura.