Introduction à Oracle Cloud Infrastructure Data Flow

Ce tutoriel présente le service Oracle Cloud Infrastructure Data Flow, qui permet d'exécuter à toute échelle une application Spark Apache sans déployer ni gérer d'infrastructure.

Si vous avez déjà utilisé Spark, ce tutoriel vous en apprendra davantage, mais aucune connaissance antérieure sur Spark n'est requise. Toutes les données et applications Spark vous ont été fournies. Ce tutoriel montre comment Data Flow rend les applications Spark faciles d'utilisation, répétables, sûres et simples à partager dans toute l'entreprise.

Dans ce tutoriel, vous allez découvrir les aspects suivants :
  1. Utilisation de Java pour effectuer des opérations ETL dans une application Data Flow .
  2. Utilisation de SparkSQL dans une application SQL.
  3. Création et exécution d'une application Python pour effectuer une tâche simple d'apprentissage automatique.

Vous pouvez également réaliser ce tutoriel à l'aide de spark-submit à partir de l'interface de ligne de commande ou de spark-submit et du kit SDK Java.

Avantages de Data Flow
Le service Data Flow offre de nombreux avantages par rapport à l'exécution de vos propres clusters Spark ou des autres services Spark.
  • Il est sans serveur, ce qui signifie que vous n'avez pas besoin d'experts pour provisionner, corriger, mettre à niveau ou gérer les clusters Spark. Vous pouvez donc vous concentrer uniquement sur votre code Spark.
  • Il propose des réglages et des opérations simples. L'accès à l'interface utilisateur Spark est une sélection et est régi par les stratégies d'autorisation IAM. Si un utilisateur se plaint de la lenteur d'un travail, toute personne ayant accès à l'exécution peut ouvrir l'interface utilisateur Spark et accéder à la cause première. L'accès au serveur d'historique Spark est aussi simple pour les travaux déjà réalisés.
  • Il est parfaitement adapté au traitement en batch. La sortie de l'application est automatiquement capturée et rendue disponible par les API REST. Vous avez besoin d'exécuter un travail Spark SQL de quatre heures et de charger les résultats dans votre système de gestion de pipeline ? Dans Data Flow, il vous suffit de deux appels d'API REST.
  • Il comporte un contrôle consolidé. Data Flow permet d'obtenir une vue consolidée de toutes les applications Spark, des utilisateurs qui les exécute et de leur consommation. Vous voulez savoir quelles applications écrivent la plupart des données et quels utilisateurs les exécutent ? Il vous suffit de trier les données en fonction de la colonne Données écrites. Un travail est-il en cours d'exécution depuis trop longtemps ? Toute personne disposant des droits d'accès IAM corrects peut visualiser le travail et l'arrêter.
Exemple de liste d'exécutions. Un tableau à neuf colonnes et trois lignes est affiché. Les colonnes sont les suivantes : Nom, Langage, Statut, Propriétaire, Date de création, Durée, Nombre total d'OCPU, Données lues et Données écrites. Les cellules des trois lignes sont toutes renseignées. Les noms sont Tutorial Example 1, Tutorial Example 2 et Tutorial Example 3. Les langages sont Java, Python et SQL, respectivement. Les trois ont le statut Succès.

Avant de commencer

Pour exécuter ce tutoriel, vous devez avoir configuré votre location et pouvez accéder à Data Flow.

Configuration de votre location

Pour pouvoir exécuter Data Flow, vous devez accorder des droits d'accès permettant la capture des journaux et la gestion des exécutions. Reportez-vous à la section Configuration de l'administration dans le guide du service Data Flow et suivez les instructions fournies.

Accès à Data Flow
  1. Dans la console, sélectionnez le menu de navigation pour afficher la liste des services disponibles.
  2. Sélectionnez Analytics et IA.
  3. Dans Big Data, sélectionnez Data Flow.
  4. Sélectionnez Applications.

1. ETL avec Java

Exercice pour apprendre à créer une application Java dans Data Flow

Les étapes ci-dessous concernent l'utilisation de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de l'interface de ligne de commande ou de spark-submit avec le kit SDK Java.

Présentation

La première étape la plus courante dans les applications de traitement des données consiste à prendre des données à partir d'une source et à les convertir dans un format adapté à la génération de rapports et à d'autres formes d'analyse. Dans une base de données, vous chargez un fichier plat dans la base de données et créez des index. Dans Spark, la première étape consiste à nettoyer et à convertir les données d'un format texte au format Parquet. Parquet est un format binaire optimisé prenant en charge les lectures efficaces, ce qui le rend idéal pour la génération de rapports et les analyses. Dans cet exercice, vous prenez les données source, les convertissez au format Parquet, puis les utilisez pour différentes tâches intéressantes. L'ensemble de données est l'ensemble de données Berlin Airbnb Data, téléchargé sur le site Web Kaggle sous les conditions de la licence Creative Commons CC0 1.0 Universal (CC0 1.0) "Public Domain Dedication".

Un cadre est affiché avec le libellé Données CSV, Lecture facile, Lent. Une flèche pointe vers un cadre situé à droite, libellé Parquet, Plus difficile à lire, Rapide. Deux flèches partent de ce cadre : l'une vers un cadre libellé Requêtes SQL et l'autre vers un cadre libellé Apprentissage automatique.

Les données sont fournies au format CSV. La première étape est de les convertir au format Parquet et de les stocker dans la banque d'objets à des fins de traitement en aval. Une application Spark, appelée oow-lab-2019-java-etl-1.0-SNAPSHOT.jar, est fournie pour cette conversion. L'objectif est de créer une application Data Flow qui exécute cette application Spark avec les paramètres appropriés. Etant donné que vous débutez, cet exercice vous guide étape par étape et fournit les paramètres nécessaires. Vous devrez ensuite fournir les paramètres vous-même, pour garantir que vous comprenez bien ce que vous saisissez et pourquoi.

Création de l'application Java

Créez une application Java Data Flow à partir de la console, ou avec Spark-submit à partir de la ligne de commande ou à l'aide du kit SDK.

Création de l'application Java dans la console

A partir de la console, créez une application Java dans Data Flow.

Création d'une application Data Flow.

  1. Accédez au service Data Flow dans la console en développant le menu en haut à gauche et en le déplaçant jusqu'en bas.
  2. Mettez en surbrillance Data Flow, puis sélectionnez Applications. Sélectionnez le compartiment dans lequel créer les applications Data Flow. Enfin, sélectionnez Créer une application. SelectCreate Application
  3. Sélectionnez Application Java et entrez le nom de l'application. Par exemple, Tutorial Example 1. La page Application apparaît avec la section Créer une application déployée sur le côté droit. En haut se trouve une section intitulée Informations générales, qui contient deux champ de texte nommés Nom et Description. Ensuite, il s'agit d'une section appelée Configuration des ressources dans laquelle deux champs de texte sont visibles. En bas figurent trois boutons : Créer, Enregistrer en tant que pile et Annuler.
  4. Faites défiler vers le bas jusqu'à Configuration de ressource. Conservez toutes les valeurs par défaut. La page Application apparaît avec la section Créer une application déployée sur le côté droit. La section Configuration des ressources est visible. En haut se trouve une liste déroulante appelée Version de Spark. Spark 3.0.2 est sélectionné, mais les versions Spark 2.4.4 et Spark 3.2.1 sont également répertoriées. Ci-dessous, mais partiellement masqué par la liste des versions de Spark est un champ de texte appelé Sélectionner un pool. Il s'agit ensuite d'un champ de texte appelé Forme du pilote. VM.Standard.E4. La modulation est sélectionnée. Vous trouverez ci-dessous une section permettant de personnaliser le nombre d'OCPU. En bas figurent trois boutons : Créer, Enregistrer en tant que pile et Annuler.
  5. Faites défiler la page jusqu'à Configuration de l'application. Configurez l'application comme suit :
    1. URL du fichier : emplacement du fichier JAR dans le stockage d'objet. L'emplacement de cette application est le suivant :
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. Nom de classe principale : les applications Java ont besoin d'un nom de classe principale qui dépend de l'application. Pour cet exercice, entrez la valeur suivante :
      convert.Convert
    3. Arguments : l'application Spark attend deux paramètres de ligne de commande, un pour l'entrée et un pour la sortie. Dans le champ Arguments, entrez ce qui suit :
      ${input} ${output}
      Vous êtes invité à saisir des valeurs par défaut. Nous vous recommandons de les saisir maintenant.
    La page Application apparaît avec la section Créer une application déployée sur le côté droit side.The Application Configuration. En haut se trouve une section appelée Sélectionner un fichier. Une case à cocher intitulée Entrer l'URL du fichier manuellement est sélectionnée. En dessous se trouve un champ de texte appelé URL du fichier. Il contient le chemin d'accès au fichier .jar. En dessous se trouve un champ de texte appelé Nom de classe principale. Il est renseigné avec la valeur convert.Convert. En dessous figure un champ de texte appelé Arguments. Il est renseigné avec la valeur ${input} ${output}.
  6. Les arguments d'entrée et de sortie sont les suivants :
    1. Entrée :
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
    2. Sortie :
      oci://<yourbucket>@<namespace>/optimized_listings

    Vérifiez de nouveau la configuration d'application pour vous assurer qu'elle se présente comme suit : La page Application apparaît avec la section Créer une application déployée sur le côté droit. La section Configuration de l'application est visible. Un champ de texte nommé Arguments est affiché. Il est renseigné avec la valeur ${input} ${output}. En dessous se trouvent les champs de texte dédiés aux paramètres. Deux d'entre eux sont grisés et renseignés respectivement avec l'entrée et la sortie. En regard de chacun d'entre eux se trouve un champ de texte libellé Valeur par défaut qui est renseigné avec les répertoires respectifs. Ci-dessous se trouve une section appelée URI d'archive.

    Remarque

    Vous devez personnaliser le chemin de sortie pour qu'il pointe vers un bucket dans le locataire.
  7. Lorsque vous avez terminé, sélectionnez Créer. Lorsque l'application est créée, elle apparaît dans la liste Application. Page Applications. Cette liste contient une seule application. Il se compose de sept colonnes : Nom, Langue, Version Spark, Type d'application, Propriétaire, Créé et Mis à jour. Le nom contient la valeur Tutorial Example 1. Le langage est défini sur Java. La version de Spark est définie sur 3.2.1. Le type d'application est défini sur Lot. Les autres champs sont renseignés en fonction de l'utilisateur qui a créé l'application, de sa date de création et de sa date de dernière mise à jour (dans ce cas, il s'agit de la même date que celle de la création).

Félicitations ! Vous avez créé votre première application Data Flow. Maintenant, vous pouvez l'exécuter.

Création de l'application Java à l'aide de spark-submit et de l'interface de ligne de commande

Utilisez spark-submit et l'interface de ligne de commande pour créer une application Java.

  1. Configurez la location.
  2. Si vous ne disposez pas d'un bucket dans Object Storage dans lequel vous pouvez enregistrer l'entrée et les résultats, vous devez en créer un avec une structure de dossiers appropriée. Dans cet exemple, la structure de dossiers est /output/tutorial1.
  3. Exécutez le code suivant :
    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'
    Si vous avez déjà réalisé ce tutoriel avant, supprimez le contenu du répertoire de sortie, oci://<bucket-name>@<namespace-name>/output/tutorial1, pour éviter l'échec du tutoriel.
    Remarque

    Pour rechercher l'ID de compartiment, sélectionnez Identité dans le menu de navigation, puis Compartiments. Les compartiments disponibles sont répertoriés, y compris l'OCID de chacun.
Création de l'application Java à l'aide de Spark-Submit et du kit SDK

Effectuez cet exercice pour créer une application Java dans Data Flow à l'aide de spark-submit et du kit SDK Java.

Voici les fichiers pour exécuter cet exercice. Ils sont disponibles sur les URI Object Storage publics suivants :

  • Fichiers d'entrée au format CSV :
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
  • Fichier JAR:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
  1. Créez un bucket dans Object Storage où enregistrer l'entrée et les résultats.
  2. Exécutez le code suivant :
    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!");
     
      }
    }
Exécution de l'application Java Data Flow

Une fois l'application Java créée, exécutez-la.

  1. Si vous avez suivi les étapes avec précision, il vous suffit de mettre en surbrillance votre application dans la liste, de sélectionner le menu Actions et de sélectionner Exécuter.
  2. Vous pouvez personnaliser les paramètres avant d'exécuter l'application. Dans votre cas, vous avez saisi les valeurs précises à l'avance. Vous pouvez donc commencer l'exécution en cliquant sur Run. La page Exécuter l'application Java est développée et recouvre le côté droit de la page Applications. En haut se trouve une liste déroulante appelée Forme du pilote. La forme VM.Standard2.1 (15 Go, 1 OCPU) est sélectionnée. En dessous se trouve une liste déroulante appelée Forme de l'exécuteur. La forme VM.Standard2.1 (15 Go, 1 OCPU) est sélectionnée. En dessous figure un champ de texte libellé Nombre d'exécuteurs ; il contient 1. En dessous figure un champ de texte appelé Arguments. Il est grisé et contient ${input} ${output}. En dessous se trouvent deux champs de texte côte à côte pour les paramètres. Le premier, appelé Nom, est grisé mais contient input. L'autre, appelé Valeur par défaut, contient le répertoire d'entrée et peut être modifié. Une barre de défilement à droite est positionnée en haut de la page. En bas de l'écran se trouvent deux boutons : Exécuter et Annuler. L'utilisateur va cliquer sur Exécuter.
  3. Pendant l'exécution de l'application, vous pouvez éventuellement charger l'interface utilisateur Spark afin de surveiller la progression. Dans le menu Actions de l'exécution en question, sélectionnez Interface utilisateur Spark. Page Applications avec Tutorial Example 1 comme seule application répertoriée. Le menu contextuel à la fin de la ligne de la liste a été sélectionné et affiche les options suivantes : Afficher les détails, Modifier, Exécuter, Ajouter des balises, Afficher les balises et Supprimer. L'utilisateur va cliquer sur l'interface utilisateur Spark.

  4. Vous êtes automatiquement redirigé vers l'interface utilisateur Apache Spark, qui est utile pour le débogage et le réglage des performances.L'interface utilisateur Spark avec un graphique des exécuteurs, quand ils ont été ajoutés ou enlevés, et des travaux, quand ils sont en cours d'exécution et s'ils ont réussi ou échoué. Ils comportent un code couleur. En dessous se trouve un tableau des travaux actifs, avec six colonnes. Les colonnes sont les suivantes : ID de travail, Description, Soumis, Durée, Phases : Succès/Total et Tâches (pour toutes les phases) : Succès/Total.
  5. Après environ une minute, votre exécution se termine avec l'état Succeeded : La page Exécutions est affichée avec deux exécutions : Tutorial Example 1 et Tutorial Example 2. Le tableau des exécutions comporte neuf colonnes. Il s'agit des colonnes suivantes : Nom, Langage, Statut, Propriétaire, Date de création, Durée, Nombre total d'OCPU, Données lues et Données écrites. Le statut pour Tutorial Example 1 est Succès.

  6. Explorez l'exécution pour voir des détails supplémentaires et faites défiler vers le bas pour consulter la liste des journaux. La partie inférieure de la page Détails de l'exécution est affichée, avec une section libellée Journaux. Elle comporte un tableau à cinq colonnes contenant deux fichiers journaux. Les colonnes sont les suivantes : Nom, Taille de fichier, Source, Type et Date de création. Il s'agit d'un fichier stdout.log et d'un fichier stderr.log. Dans le menu de gauche, à gauche de la section Journaux, figure une section intitulée Ressources. Elle contient les journaux (qui sont mis en surbrillance lorsqu'ils sont sélectionnés) et les exécutions associées.

  7. Lorsque vous sélectionnez le fichier spark_application_stdout.log.gz, la sortie de journal Conversion was successful apparaît : Page vide, avec un texte tout en haut. Le texte est le suivant : Conversion réussie.

  8. Vous pouvez également accéder au bucket de stockage d'objet de la sortie pour vérifier que des fichiers ont été créés. La section Objets est affichée. Elle comporte trois boutons : Télécharger les objets, Restaurer et Supprimer. Seul le premier est actif. En dessous se trouve un tableau à quatre colonnes (Nom, Taille, Statut et Date de création). Les objets disponibles y sont répertoriés.

    Ces nouveaux fichiers sont utilisés par les applications ultérieures. Assurez-vous qu'ils apparaissent dans votre bucket avant de passer aux exercices suivants.

2. SparkSQL simplifié

Dans cet exercice, vous exécutez un script SQL pour effectuer le profilage de base d'ensemble de données.

Cet exercice utilise la sortie que vous avez générée dans l'exercice 1. ETL avec Java. Vous devez l'avoir terminé avec succès avant de pouvoir essayer celui-ci.

Les étapes ci-dessous concernent l'utilisation de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de l'interface de ligne de commande ou de spark-submit avec le kit SDK Java.

Présentation

Comme pour d'autres applications Data Flow, les fichiers SQL sont stockés dans le stockage d'objet et peuvent être partagés entre plusieurs utilisateurs SQL. Pour cela, Data Flow vous permet de paramétrer des scripts SQL et de les personnaliser lors de l'exécution. Comme pour les autres applications, vous pouvez fournir des valeurs par défaut pour les paramètres qui servent souvent d'indications précieuses aux utilisateurs exécutant ces scripts.

Le script SQL est disponible et peut être utilisé directement dans l'application Data Flow. Il n'est pas nécessaire de créer une copie. Le script est reproduit ici pour illustrer quelques points.

Texte de référence du script SparkSQL : Exemple de code SparkSQL.

Points importants :
  1. Le script commence par créer les tables SQL dont nous avons besoin. Actuellement, Data Flow ne comporte pas de catalogue SQL persistant. Tous les scripts doivent donc commencer par définir les tables nécessaires.
  2. L'emplacement de la table est défini sur ${location}. Il s'agit d'un paramètre que l'utilisateur doit fournir au moment de l'exécution. Cela permet à Data Flow d'utiliser un seul script pour traiter de nombreux emplacements et partager du code entre différents utilisateurs. Pour cet exercice, nous devons personnaliser ${location} afin qu'il pointe vers l'emplacement de sortie utilisé dans l'exercice 1.
  3. Comme nous le verrons, la sortie du script SQL est capturée et nous est rendue disponible dans le cadre de l'exécution.
Création d'une application SQL
  1. Dans Data Flow, créez une application SQL, sélectionnez SQL comme type et acceptez les ressources par défaut. Dans la page Créer une application, qui recouvre le côté droit de la page Applications, se trouve une section appelée Configuration de l'application. Les cases à cocher Spark Streaming et Utiliser les options de soumission Spark ne sont pas sélectionnées. Sous un libellé appelé Langue, il y a quatre boutons radio. SQL est le langage sélectionné.
  2. Sous Configuration de l'application, configurez l'application SQL comme suit :
    1. URL du fichier : emplacement du fichier SQL dans le stockage d'objet. L'emplacement de cette application est le suivant :
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_sparksql_report.sql
    2. Arguments : le script SQL attend un paramètre, l'emplacement de sortie de l'étape précédente. Sélectionnez Ajouter un paramètre et saisissez un paramètre nommé location avec la valeur que vous avez utilisée comme chemin de sortie à l'étape a, en fonction du modèle.
      oci://[bucket]@[namespace]/optimized_listings

    Une fois que vous avez terminé, vérifiez que la configuration de l'application est semblable à la suivante :

    La section Configuration de l'application est visible dans la page d'extraction Create Application qui s'affiche à droite de la page Applications. Une case à cocher Utiliser les options de soumission Spark n'est pas sélectionnée. Sous Langue sont quatre boutons radio, SQL est sélectionné. Il existe une section appelée Sélectionner un fichier. La case Saisir l'URL du fichier manuellement est cochée. Une zone de texte, libellée URL du fichier, contient le lien vers le fichier .sql. En dessous se trouvent deux zones de texte côte à côte dans la sous-section Paramètres. La première, libellée Nom, contient l'emplacement. La seconde est libellée Valeur et contient le chemin d'un répertoire.

  3. Personnalisez la valeur d'emplacement avec un chemin valide dans votre location.
Exécution d'une application SQL
  1. Enregistrez l'application et exécutez-la dans la liste Applications. La Page Applications est affichée, avec les deux applications créées jusqu'à présent dans ce tutoriel, dans l'ordre chronologique inversé. Le tableau qui répertorie les applications comprend cinq colonnes : Nom, Langage, Propriétaire, Date de création et Date de mise à jour. A la fin de chaque ligne figure un menu contextuel. Pour Tutorial Example 2, l'utilisateur a cliqué sur le menu contextuel et les options sont affichées. Il s'agit des options suivantes : Afficher les détails, Modifier, Exécuter, Ajouter des balises, Afficher les balises et Supprimer. L'utilisateur va cliquer sur Exécuter.
  2. Une fois l'exécution terminée, ouvrez l'exécution : La page Exécutions est affichée avec les deux applications créées jusqu'à présent dans ce tutoriel, dans l'ordre chronologique inversé. Chacune a subi une seule exécution. Le tableau qui répertorie les applications comporte neuf colonnes : Nom, Langage, Statut, Propriétaire, Date de création, Durée, Nombre total d'OCPU, Données lues et Données écrites. Le statut de Tutorial Example 2 a la valeur Succès et les autres cellules du tableau sont renseignées.
  3. Accédez aux journaux de l'exécution : Bas de la page Détails de l'exécution. Sous les détails se trouve une section libellée Journaux. Elle répertorie les fichiers journaux disponibles dans un tableau à cinq colonnes. Les colonnes sont les suivantes : Nom, Taille de fichier, Source, Type et Date de création. Les deux fichiers journaux répertoriés sont stdout.log et stderr.log. A gauche figure une petite section libellée Ressources. Elle contient deux liens, Journaux et Ressources. Le lien Journaux est sélectionné.
  4. Ouvrez spark_application_stdout.log.gz et vérifiez que la sortie correspond à celle ci-dessous.
    Remarque

    Les lignes peuvent être dans un ordre différent de celui de l'image, mais les valeurs doivent correspondre.
    Sortie du fichier spark_application_stdout.log.gz. Elle comporte cinq colonnes de données. Les colonnes n'ont pas de nom et n'ont pas la même largeur. La première colonne contient du texte, les autres contiennent des nombres.
  5. Suite à votre profilage SQL, vous pouvez conclure que, dans cet ensemble de données, Neukolln possède le prix moyen le plus bas avec 46,57 $, tandis que Charlottenburg-Wilmersdorf possède le prix moyen le plus élevé avec 114,27 $ (remarque : l'ensemble de données source comporte des prix en dollars US et non en euros).

Cet exercice a montré certains aspects clés de Data Flow. Lorsqu'une application SQL est en place, n'importe qui peut facilement l'exécuter sans se soucier de la capacité du cluster, de l'accès aux données et de leur conservation, de la gestion des informations d'identification ou d'autres considérations relatives à la sécurité. Par exemple, un analyste peut facilement utiliser les rapports basés sur Spark grâce à Data Flow.

3. Apprentissage automatique avec PySpark

Utilisez PySpark pour effectuer une tâche simple d'apprentissage automatique sur les données d'entrée.

Cet exercice utilise la sortie de l'exercice 1. ETL avec Java comme données d'entrée. Vous devez avoir terminé le premier exercice pour pouvoir commencer celui-ci. Cette fois-ci, votre objectif est de déterminer les meilleures affaires parmi les différentes annonces Airbnb à l'aide des algorithmes d'apprentissage automatique de Spark.

Les étapes ci-dessous concernent l'utilisation de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de l'interface de ligne de commande ou de spark-submit avec le kit SDK Java.

Présentation

Une application PySpark peut être utilisée directement dans vos applications Data Flow. Vous n'avez pas besoin de créer une copie.

Le texte de référence du script PySpark est fourni ici pour illustrer quelques points : Exemple de code PySpark.

Voici quelques observations concernant ce code :
  1. Le script Python attend un argument de ligne de commande (en rouge). Lorsque vous créez l'application Data Flow, vous devez créer un paramètre que l'utilisateur définit sur le chemin d'entrée.
  2. Le script utilise la régression linéaire pour prévoir un prix par annonce et trouve les meilleures affaires en soustrayant le prix de base à la prédiction. La plus grande valeur négative indique la meilleure valeur, en fonction du modèle.
  3. Le modèle dans ce script est simplifié et ne prend en compte que la superficie. Dans un contexte réel, vous utilisez davantage de variables, telles que le quartier et d'autres variables prédictives importantes.
Création d'une application PySpark

Créez une application PySpark à partir de la console, ou avec spark-submit à partir de la ligne de commande ou à l'aide du kit SDK.

Apprentissage automatique avec PySpark à l'aide de la console

Créez une application PySpark dans Data Flow à l'aide de la console.

  1. Créez une application et sélectionnez le type Python.
    Dans la page d'extraction Créer une application, Python est sélectionné en tant que langage.
  2. Dans Configuration de l'application, configurez l'application comme suit :
    1. URL du fichier : emplacement du fichier Python dans le stockage d'objet. L'emplacement de cette application est le suivant :
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py
    2. Arguments : l'application Spark attend deux paramètres de ligne de commande, un pour l'entrée et un pour la sortie. Dans le champ Arguments, entrez ce qui suit :
      ${location}
      . Vous êtes invité à saisir une valeur par défaut. Entrez la valeur utilisée comme chemin de sortie à l'étape a du modèle ::
      oci://<bucket>@<namespace>/optimized_listings
  3. Vérifiez à nouveau la configuration de l'application et vérifiez qu'elle est semblable à la suivante :
    La section Configuration de l'application est visible dans la page d'extraction Créer une application qui couvre le côté droit de la page Applications. Il existe une case Utiliser les options spark-submit, qui n'est pas sélectionnée. Python est le langage sélectionné. Une zone de texte, libellée URL du fichier, contient le lien vers le fichier .py. En dessous figure une autre zone de texte, libellée Arguments, qui contient ${location}. En dessous se trouvent deux zones de texte côte à côte dans la sous-section Paramètres. La première est grisée et contient location. La seconde contient le chemin d'un répertoire.
  4. Personnalisez la valeur d'emplacement avec un chemin valide dans la location.
Apprentissage automatique avec PySpark à l'aide de spark-submit et de l'interface de ligne de commande

Créez une application PySpark dans Data Flow à l'aide de l'interface de ligne de commande et de la soumission Spark.

  1. Allez terminer l'exercice Créer l'application Java à l'aide de Spark-Submit et de l'interface de ligne de commande avant d'essayer cet exercice. Les résultats sont utilisés ici.
  2. Exécutez le code suivant :
    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'
Apprentissage automatique avec PySpark à l'aide de spark-submit et du kit SDK

Créez une application PySpark dans Data Flow à l'aide de Spark-submit et du kit SDK.

  1. Exercice complet Création de l'application Java à l'aide de Spark-Submit et du kit SDK, avant de tenter cet exercice. Les résultats sont utilisés ici.
  2. Exécutez le code suivant :
    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);
        }
     
     
      }
    }
Exécution d'une application PySpark
  1. Exécutez l'application à partir de la liste Application. La Page Applications est affichée, avec les trois applications créées dans ce tutoriel dans l'ordre chronologique inversé. Le tableau qui répertorie les applications comprend cinq colonnes : Nom, Langage, Propriétaire, Date de création et Date de mise à jour. A la fin de chaque ligne figure un menu contextuel. Pour Tutorial Example 3, l'utilisateur a cliqué sur le menu contextuel et les options sont affichées. Il s'agit des options suivantes : Afficher les détails, Modifier, Exécuter, Ajouter des balises, Afficher les balises et Supprimer. L'utilisateur va cliquer sur Exécuter.
  2. Une fois l'exécution terminée, ouvrez-la et accédez aux journaux. Bas de la page Détails de l'exécution. Sous les détails se trouve une section libellée Journaux. Elle répertorie les fichiers journaux disponibles dans un tableau à cinq colonnes. Les colonnes sont les suivantes : Nom, Taille de fichier, Source, Type et Date de création. Les deux fichiers journaux répertoriés sont stdout.log et stderr.log. A gauche figure une petite section libellée Ressources. Elle contient deux liens, Journaux et Ressources. Le lien Journaux est sélectionné.

  3. Ouvrez le fichier spark_application_stdout.log.gz. La sortie doit être identique à ce qui suit : Sortie du fichier spark_application_stdout.log.gz. Elle contient un tableau à six colonnes. Les colonnes sont les suivantes : id, name, features, price, prediction et value. Seules les vingt premières lignes sont affichées. Toutes les cellules sont renseignées.
  4. Dans cette sortie, vous constatez que l'ID d'annonce 690578 représente la meilleure affaire avec un prix prévu de 313,70 $ par rapport au prix de base de 35,00 $, pour une superficie indiquée de 430 mètres carrés. Si cela semble trop beau pour être vrai, l'ID unique vous permet d'explorer les données pour mieux comprendre s'il s'agit ou non d'une bonne affaire. Un analyste peut donc facilement utiliser la sortie de cet algorithme d'apprentissage automatique pour compléter son analyse.

Etapes suivantes

Vous pouvez maintenant créer et exécuter des applications Java, Python ou SQL avec Data Flow, et explorer les résultats.

Data Flow gère tous les détails du déploiement, de la désactivation, de la gestion des journaux, de la sécurité et de l'accès utilisateur. Avec Data Flow, vous pouvez vous concentrer sur le développement d'applications Spark sans vous soucier de l'infrastructure.