Introduction au service de flux de données pour Oracle Cloud Infrastructure

Ce tutoriel présente Oracle Cloud Infrastructure Data Flow, un service qui vous permet d'exécuter n'importe quelle application Spark Apache à n'importe quelle échelle, sans infrastructure à déployer ou à gérer.

Si vous avez déjà utilisé Spark, vous retirerez davantage de ce tutoriel, mais aucune connaissance préalable de Spark n'est requise. Toutes les applications et données Spark sont fournies pour vous. Ce tutoriel montre comment le service de flux de données rend l'exécution d'applications Spark simple, répétable et sécurisée, et en facilite le partage dans l'ensemble de l'entreprise.

Ce tutoriel décrit les opérations suivantes :
  1. Comment utiliser Java pour l'ETC dans une application de flux de données Application
  2. Comment utiliser SparkSQL dans une application SQL.
  3. Comment créer et exécuter une application Python pour exécuter une tâche d'apprentissage automatique simple.

Vous pouvez également exécuter ce tutoriel à l'aide de spark-submit à partir de l'interface CLI ou à l'aide de spark-submit et de la trousse SDK Java.

Avantages du service de flux de données
Voici les raisons pour lesquelles le service de flux de données est plus avantageux que d'exécuter vos propres grappes Spark ou d'autres services Spark.
  • Il est sans serveur, ce qui signifie que vous n'avez pas besoin d'experts pour provisionner, mettre à niveau ou maintenir des grappes Spark. Cela signifie que vous vous concentrez sur votre code Spark et rien d'autre.
  • Il est facile à exploiter et à ajuster. L'accès à l'interface utilisateur Spark est limité et est régi par les politiques d'autorisation IAM. Si un utilisateur se plaint qu'une tâche est trop lente, toute personne ayant accès à l'exécution peut ouvrir l'interface utilisateur Spark et découvrir la cause fondamentale. L'accès au serveur d'historique Spark est aussi simple pour les tâches déjà exécutées.
  • Il est idéal pour le traitement par lots. La sortie de l'application est automatiquement saisie et mise à disposition par les API REST. Devez-vous exécuter une tâche SQL Spark de quatre heures et charger les résultats dans votre système de gestion du pipeline? Avec le service de flux de données, il suffit de deux appels d'API REST.
  • Il offre un contrôle consolidé. Le service de flux de données vous offre une vue consolidée de toutes les applications Spark, de leur exécutant et de leur consommation. Aimeriez-vous savoir quelles applications écrivent la plus grande quantité de données et qui les exécute? Effectuez simplement un tri sur la colonne Écriture de données. Une tâche est en cours depuis trop longtemps? Toute personne disposant des autorisations IAM appropriées peut voir le travail et l'arrêter.
Exemple de liste d'exécutions. Un tableau de neuf colonnes et trois rangées est affiché. Les colonnes sont Nom, Langage, Statut, Responsable, Créé, Durée, Nombre total d'OCPU, Lecture de données, Écriture de données. Les cellules dans les trois rangées sont toutes alimentées. Les noms sont : Tutorial Example 1, Tutorial Example 2 et Tutorial Example 3. Les langages pour chacun sont Java, Python et SQL respectivement. Les trois ont le statut Réussite.

Avant de commencer

Pour exécuter ce tutoriel avec succès, vous devez avoir configuré votre location et pouvoir accéder au service de flux de données.

Configurer votre location

Avant d'exécuter Flux de données, vous devez accorder des autorisations qui permettent la saisie des journaux et la gestion des exécutions. Reportez-vous à la section Configurer l'administration dans le guide du service de flux de données et suivez les instructions fournies.

Accès au service de flux de données
  1. Dans la console, sélectionnez le menu de navigation pour afficher la liste des services disponibles.
  2. Sélectionnez Analyse et intelligence artificielle.
  3. Sous Mégadonnées, sélectionnez Flux de données.
  4. Sélectionnez Applications.

1. Extraction, transformation et chargement avec Java

Exercice pour apprendre à créer une application Java dans le service de flux de données

Ces étapes sont exécutées à partir de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de la CLI ou de spark-submit avec la trousse SDK Java.

Aperçu

La première étape la plus courante dans les applications de traitement des données est de prendre les données d'une source quelconque et de les mettre dans un format adapté à la production de rapports et à d'autres formes d'analyse. Dans une base de données, vous chargeriez un fichier plat dans la base de données et créeriez des index. Dans Spark, votre première étape est de nettoyer et de convertir les données d'un format texte en format Parquet. Parquet est un format binaire optimisé qui prend en charge les lectures efficaces, ce qui en fait un format idéal pour la production de rapports et les analyses. Dans cet exercice, vous convertirez des données sources au format Parquet et les exploiterez au mieux. L'ensemble de données est l'ensemble de données Airbnb de Berlin, téléchargé à partir du site Web de Kaggle sous les termes de la licence Creative Commons CC0 1.0 Universal (CC0 1.0) " Public Domain Dedication ".

Une boîte contient CSV Data, Easy to Read, Slow (Données CSV, faciles à lire, lent) Une flèche pointe la boîte à droite qui con tient Parquet, Harder to Read, Fast (Parquet, difficile à lire, rapide) De cette boîte partent deux flèches, une vers la boîte SQL Queries (Interrogations SQL) et l'autre vers Machine Learning (Apprentissage automatique).

Les données sont fournies en format CSV et la première étape consiste à convertir ces données en format Parquet et à les stocker dans le magasin d'objets aux fins de traitement en aval. Une application Spark, appelée oow-lab-2019-java-etl-1.0-SNAPSHOT.jar, est fournie pour effectuer cette conversion. L'objectif est de créer une application de flux de données qui exécute cette application Spark et de l'exécuter avec les paramètres appropriés. Comme vous débutez, cet exercice vous guidera étape par étape et fournira les paramètres dont vous avez besoin. Plus tard, vous devrez fournir les paramètres vous-mêmes, aussi assurez-vous de bien comprendre ce que vous entrez et pourquoi.

Créer l'application Java

Créez une application Java de flux de données à partir de la console, ou avec Spark-submit à partir de la ligne de commande ou à l'aide de la trousse SDK.

Créez l'application Java dans la console

Créez une application Java dans le service de flux de données à partir de la console.

Créer une application de flux de données.

  1. Naviguez jusqu'au service de flux de données dans la console en développant le menu hamburger dans la gauche, puis en le faisant défiler jusqu'à la fin.
  2. Sélectionnez Flux de données , puis Applications. Sélectionnez le compartiment dans lequel vous souhaitez créer les applications de flux de données. Enfin, sélectionnez Créer une application. Application SelectCreate
  3. Sélectionnez Application Java et entrez un nom pour l'application, par exemple Tutorial Example 1. La page Application s'affiche avec la section escamotable Créer une application dans la partie droite. En haut, la section Informations générales contenant un champ de texte nommé Nom et un autre nommé Description est affichée. Il s'agit ensuite d'une section appelée Configuration des ressources dans laquelle deux champs de texte sont visibles. Au bas se trouvent trois boutons : Create, Save as stack et Cancel.
  4. Accédez à Configuration des ressources. Ne modifiez pas les valeurs par défaut. La page Application affichée avec la section escamotable Créer une application dans la partie droite. La section Resource Configuration (Configuration des ressources) est visible. Dans le haut, il y a une liste déroulante nommée Version de Spark. Spark 3.0.2 est sélectionné, mais Spark 2.4.4 et Spark 3.2.1 sont également listés. Ci-dessous, mais partiellement masqué par la liste des versions Spark se trouve un champ de texte appelé Sélectionner un groupe. Il s'agit d'un champ de texte appelé Driver Shape. VM.Standard.E4. Le champ flexible est sélectionné. La section ci-dessous et partiellement rognée permet de personnaliser le nombre d'OCPU. En bas se trouvent trois boutons : Create, Save as Stack et Cancel.
  5. Défilez vers le bas jusqu'à Configuration de l'application. Configurez l'application de la façon suivante :
    1. URL de fichier : Emplacement du fichier JAR dans le stockage d'objets. Emplacement de cette application :
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. Nom de la classe principale : Les applications Java nécessitent un nom de classe principale qui dépend de l'application. Pour cet exercice, entrez :
      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
      ${input} ${output}
      Vous êtes invité à entrer des valeurs par défaut et c'est une bonne idée de les entrer maintenant.
    La page Application affichée avec la section déroulante Créer une application dans la partie droite side.The Configuration de l'application est visible. En haut se trouve une section intitulé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 nommé URL de fichier. Il contient le chemin d'accès au fichier .jar. En dessous se trouve le champ de texte nommé Nom de la classe principale. Il contient convert.Convert. En dessous se trouve le champ de texte nommé Arguments. Il contient ${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 deux fois la configuration de l'application pour vous assurer qu'elle ressemble à ceci : La page Application affichée avec la section escamotable Créer une application dans la partie droite. La section Application Configuration (Configuration de l'application) est visible. Il y a un champ de texte nommé Arguments. Il contient ${input} ${output}. Des champs de texte pour les paramètres sont affichés en dessous. Les deux à gauche sont grisés et contiennent entrée et sortie, respectivement. À côté de chacun, un champ de texte Valeur par défaut indique les répertoires respectifs. Vous trouverez ci-dessous une section appelée URI d'archive.

    Note

    Vous devez personnaliser le chemin de la sortie pour qu'il pointe vers un seau du client.
  7. Lorsque vous avez terminé, sélectionnez Créer. Une fois créée, l'application figure dans la liste d'applications.La page Applications. La liste des applications contient une application. Il se compose de sept colonnes : Nom, Langue, Version Spark, Type d'application, Responsable, Créé et Mis à jour. Le champ Nom contient Tutorial Example 1. Le langage est réglé à Java. La version de Spark est réglée à 3.2.1. Le type d'application est réglé à Lot. Les autres champs indiquent qui a créé l'application, la date de sa création et la date de sa dernière mise à jour (identique à la date de création dans ce cas).

Félicitations! Votre première application de flux de données a été créée. Vous pouvez maintenant l'exécuter.

Créer 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. Configurer votre location.
  2. Si vous n'avez pas de seau dans le stockage d'objets dans lequel enregistrer les entrées et les résultats, vous devez créer un seau avec une structure de dossier appropriée. Dans cet exemple, la structure du dossier 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à exécuté ce tutoriel, supprimez le contenu du répertoire de sortie oci://<bucket-name>@<namespace-name>/output/tutorial1 pour éviter l'échec du tutoriel.
    Note

    Pour trouver l'ID compartiment, dans le menu de navigation, sélectionnez Identité et sélectionnez Compartiments. Les compartiments disponibles pour vous sont listés, y compris l'OCID de chacun.
Créer l'application Java à l'aide de Spark-Submit et de la trousse SDK

Effectuez l'exercice pour créer une application Java dans le service de flux de données à l'aide de spark-submit et de la trousse SDK Java.

Ces fichiers permettent d'exécuter cet exercice et sont disponibles sur les URI de stockage d'objets 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 seau dans le service de stockage d'objets dans lequel enregistrer les entrées 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écuter l'application Java de flux de données

Maintenant que vous avez créé une application Java, vous pouvez l'exécuter.

  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 avez la possibilité de personnaliser des paramètres avant d'exécuter l'application. Dans votre cas, vous avez entré les valeurs précises à l'avance et vous pouvez lancer l'exécution en cliquant sur Exécuter. La page escamotable Exécuter l'application Java couvrant la partie droite de la page Applications s'affiche. En haut se trouve une liste déroulante nommée Forme du pilote. La valeur VM.Standard2.1 (15 Go, 1 OCPU) est sélectionnée. Plus bas encore, dans la liste déroulante nommée Forme de l'exécuteur, VM.Standard2.1 (15 Go, 1 OCPU) est sélectionné. Plus bas, un champ de texte intitulé Nombre d'exécuteurs contient la valeur 1. En dessous se trouve le champ de texte nommé Arguments. Il est grisé et contient ${input} ${output}. Plus bas encore, se trouvent deux champs de texte côte à côte (Paramètres). Le premier, Nom, est grisé mais contient une entrée. L'autre, Valeur par défaut, contient le répertoire d'entrée, qui peut être modifié. À droite, une barre de défilement positionnée en haut est affichée. Au bas de l'écran se trouvent deux boutons : Exécuter et Annuler. L'utilisateur s'apprête à cliquer sur Exécuter.
  3. Pendant l'exécution de l'application, vous pouvez charger l'interface utilisateur Spark  pour surveiller l'avancement. Dans le menu Actions pour l'exécution en question, sélectionnez Interface Spark. La page Applications avec Tutorial Example 1, la seule application répertoriée. Le menu kebab au bout de la rangée dans la liste a été sélectionné et affiche Voir les détails, Modifier, Exécuter, Ajouter des marqueurs, Voir les marqueurs et Supprimer. L'utilisateur s'apprête à cliquer sur Interface Spark.

  4. Vous êtes automatiquement redirigé vers l'interface utilisateur d'Apache Spark, qui est utile pour le débogage et le réglage de la performance.L'interface Spark avec un graphique des exécuteurs et le moment où ils ont été ajoutés ou supprimés, et des tâches avec leur date d'exécution et leur état de réussite ou d'échec. Un code de couleur est utilisé. Plus bas, le tableau des tâches actives comportant six colonnes. Les colonnes sont ID tâche, Description, Soumis, Durée, Étapes : Réussite/Total, et Tâches (pour toutes les étapes) : Réussite/Total.
  5. Au bout d'environ une minute, votre exécution s'est terminée avec l'état Succeeded : La page Exécutions affichée présentant deux exécutions : Tutorial Example 1 et Tutorial Example 2. Le tableau des exécutions comporte neuf colonnes. Il s'agit des colonnes Nom, Langage, Statut, Responsable, Créé, Durée, Nombre total d'OCPU, Lecture de données et Écriture de données. Le statut de Tutoriel - Exemple 1 est Réussite.

  6. Forez dans l'exécution pour voir des détails supplémentaires et faites défiler jusqu'en bas pour voir la liste des journaux. Bas de la page Détails d'exécution contenant une section intitulée Journaux. Cette section est constituée d'un tableau de cinq colonnes listant deux fichiers journaux. Les colonnes sont Nom, Taille du fichier, Source, Type et Créé. Il y a un fichier stdout.log et un fichier stderr.log. Dans le menu à gauche de la section Journaux, se trouve une section nommée Ressources. Elle contient l'option Journaux (en surbrillance, car sélectionnée) et l'option Exécutions connexes.

  7. Lorsque vous sélectionnez le fichier spark_application_stdout.log.gz, vous voyez la sortie du journal, Conversion was successful : Il y a une page vide, avec du texte tout en haut. Le texte est Conversion was successful.

  8. Vous pouvez également naviguer jusqu'au seau de stockage d'objets de la sortie pour confirmer que de nouveaux fichiers ont été créés. La section Objets est affichée. Elle comporte trois boutons : Charger les objets, Restaurer et Supprimer. Seul le premier est actif. Plus bas se trouve un tableau de quatre colonnes : Nom, Taille, Statut et Créé. Les objets disponibles sont listés.

    Ces nouveaux fichiers seront utilisés par les applications ultérieures. Assurez-vous qu'ils se trouvent dans votre seau avant de passer aux exercices suivants.

2. SparkSQL simplifié

Dans cet exercice, vous exécuterez un script SQL pour réaliser le profilage de base d'un jeu de données.

Cet exercice utilise la sortie générée dans 1. Extraction, transformation et chargement avec Java. Vous devez l'avoir terminé avec succès avant de pouvoir essayer celui-ci.

Ces étapes sont exécutées à partir de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de la CLI ou de spark-submit avec la trousse SDK Java.

Aperçu

Comme pour d'autres applications de flux de données, les fichiers SQL sont stockés dans le stockage d'objets et peuvent être partagés entre plusieurs utilisateurs SQL. Pour ce faire, le service de flux de données vous permet de paramétrer les scripts SQL et de les personnaliser lors de l'exécution. Comme pour d'autres applications, vous pouvez fournir des valeurs par défaut pour les paramètres, qui servent souvent d'indices utiles aux personnes exécutant ces scripts.

Le script SQL est disponible pour utilisation directement dans l'application de flux de données, il n'est pas nécessaire d'en créer une copie. Le script est reproduit ici pour illustrer certains points.

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

Points saillants importants
  1. Le script commence par créer les tables SQL dont nous avons besoin. Actuellement, le service de flux de données ne comporte pas de catalogue SQL persistant, donc tous les scripts doivent commencer par définir les tables dont ils ont besoin.
  2. L'emplacement de la table est défini à ${location}. Il s'agit d'un paramètre que l'utilisateur doit fournir au moment de l'exécution. Cela donne au service de flux de données la flexibilité d'utiliser un script pour traiter de nombreux emplacements et pour partager du code entre différents utilisateurs. Pour cet exercice, vous devez personnaliser la variable ${location} afin qu'elle pointe vers l'emplacement de sortie utilisé dans l'exercice 1.
  3. Comme on le verra, la sortie du script SQL est saisie et mise à notre disposition à la suite de l'exécution.
Créer une application SQL
  1. Dans le service Flux de données, créez une application SQL, sélectionnez le type SQL et acceptez les ressources par défaut. Dans la page déroulante Créer une application couvrant la partie droite de la page Applications, se trouve une section appelée Configuration d'application. Les cases à cocher, Diffusion en continu Spark et Utiliser les options Spark-Submit ne sont pas sélectionnées. Sous une étiquette appelée Langue, se trouvent quatre boutons radio. Le langage sélectionné est SQL.
  2. Sous Configuration de l'application, configurez l'application SQL comme suit :
    1. URL de fichier : Emplacement du fichier SQL dans le stockage d'objets. Emplacement de cette application :
      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, soit l'emplacement de sortie de l'étape précédente. Sélectionnez Ajouter un paramètre et entrez 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

    Lorsque vous avez terminé, assurez-vous que la configuration de l'application ressemble à ceci :

    Dans la page déroulante Create Application qui couvre la partie droite de la page Applications, la section Application Configuration s'affiche. Il y a une case à cocher, Utiliser les options Spark-Submit, non sélectionnée. Sous Langue se trouvent quatre boutons radio, SQL est sélectionné. Il y a une section appelée Sélectionner un fichier. Dans ce champ, la case Entrer l'URL du fichier manuellement est cochée. La zone de texte nommée URL de fichier contient le lien vers le fichier .sql. Plus bas encore, deux zones de texte côte à côte sont visibles dans la sous-section Paramètres. Le premier, intitulé Nom, contient location. La deuxième, Valeur, contient le chemin d'accès à un répertoire.

  3. Personnalisez la valeur d'emplacement en indiquant un chemin valide dans votre location.
Exécuter une application SQL
  1. Enregistrer l'application et l'exécuter à partir de la liste Applications. La page Applications contenant les deux applications créées jusqu'à présent dans ce tutoriel par ordre chronologique inverse. Le tableau listant les applications contient cinq colonnes, Nom, Langage, Responsable, Créé et Mis à jour. À la fin de chaque rangée se trouve un menu kebab. Pour l'exemple 2 du tutoriel, le menu kebab a été activé et les options sont affichées. Ces options sont Voir les détails, Modifier, Exécuter, Ajouter des marqueurs, Voir les marqueurs et Supprimer. L'utilisateur s'apprête à cliquer sur Exécuter.
  2. Une fois l'exécution terminée, ouvrez-la : La page Exécutions contenant les deux applications créées jusqu'à présent dans ce tutoriel par ordre chronologique inverse. Chacune a été exécutée une seule fois. Le tableau énumérant les applications contient neuf colonnes : Nom, Langage, Statut, Responsable, Créé, Durée, Nombre total d'OCPU, Lecture de données et Écriture de données. Le statut de l'exemple 2 est Réussite et les autres cellules du tableau sont remplies.
  3. Naviguez jusqu'aux journaux d'exécution : Le bas de la page Détails d'exécution. En dessous des détails se trouve la section Journaux. Elle répertorie les fichiers journaux disponibles dans un tableau de cinq colonnes. Les colonnes sont Nom, Taille du fichier, Source, Type et Créé. Les deux fichiers journaux listés sont stdout.log et stderr.log. À gauche, il y a une petite section nommée Ressources. Elle contient deux liens, Journaux et Ressources. Journaux est sélectionné.
  4. Ouvrez spark_application_stdout.log.gz et vérifiez que la sortie est conforme à la sortie suivante.
    Note

    L'ordre de vos rangées peut être différent de celui de l'image, mais les valeurs doivent correspondre.
    La sortie du fichier spark_application_stdout.log.gz. Cinq colonnes de données sont présentées. Les colonnes ne portent pas de nom et sont de largeur inégale. La première colonne contient du texte et les autres, des nombres.
  5. Selon votre profilage SQL, vous concluez que dans ce jeu de données Neukolln a le prix de catalogue moyen le plus faible à 46,57 $ alors que Charlottenburg-Wilmersdorf a la moyenne la plus élevée à 114,27 $ (Note : Le jeu de données source contient des prix en USD plutôt qu'en EUR).

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

3. Apprentissage automatique avec PySpark

Utilisez PySpark pour appliquer une tâche d'apprentissage automatique simple à des données d'entrée.

Cet exercice utilise la sortie de 1. Extraction, transformation et chargement avec Java comme données d'entrée. Vous devez avoir exécuté le premier exercice avec succès avant de pouvoir essayer celui-ci. Cette fois, votre objectif est d'identifier les meilleures affaires parmi les différentes fiches descriptives de Airbnb grâce aux algorithmes d'apprentissage automatique de Spark.

Ces étapes sont exécutées à partir de l'interface utilisateur de la console. Vous pouvez effectuer cet exercice à l'aide de spark-submit à partir de la CLI ou de spark-submit avec la trousse SDK Java.

Aperçu

Une application PySpark est disponible pour être utilisée directement dans vos applications de flux de données. 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.

Quelques observations concernant ce code :
  1. Le script Python attend un argument de ligne de commande (en rouge). Lors de la création de l'application Flux de données, vous devez créer un paramètre qui sera réglé au chemin d'entrée par l'utilisateur.
  2. Le script utilise une régression linéaire pour prédire un prix par fiche descriptive et recherche les meilleures offres en retirant le prix de catalogue de la prévision. La valeur la plus négative indique la meilleure valeur, selon le modèle.
  3. Le modèle de ce script est simplifié et tient uniquement compte de la superficie en pieds carrés. Dans une situation réelle, vous utiliseriez plus de variables, comme le voisinage et d'autres variables importantes pour la prédiction.
Créer 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 de la trousse 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 de renvoi Créer une application, Python est sélectionné comme langue.
  2. Dans la configuration de l'application, configurer l'application comme suit :
    1. URL de fichier : Emplacement du fichier Python dans le stockage d'objets. Emplacement de cette application :
      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
      ${location}
      . Vous êtes invité à entrer une valeur par défaut. Entrez la valeur utilisée comme chemin de sortie à l'étape a dans le modèle :
      oci://<bucket>@<namespace>/optimized_listings
  3. Vérifiez la configuration de l'application et vérifiez qu'elle est similaire à ce qui suit :
    Dans la page déroulante Create Application qui couvre la partie droite de la page Applications, la section Application Configuration s'affiche. Une case à cocher nommée Utiliser les options spark-submit est affichée (non cochée). Python est sélectionné comme langage. La zone de texte nommée URL de fichier contient le lien vers le fichier .py. Plus bas, une autre zone de texte intitulée Arguments contient ${location}. Plus bas encore, deux zones de texte côte à côte sont visibles dans la sous-section Paramètres. La première est grisée et contient le mot location. La seconde contient le chemin d'accès à un répertoire.
  4. Personnalisez la valeur d'emplacement en indiquant 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 le service de flux de données à l'aide de Spark-submit et de l'interface de ligne de commande.

  1. Effectuez 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 dans cet exercice.
  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 de la trousse SDK

Créez une application PySpark dans le service de flux de données à l'aide de Spark-submit et de la trousse SDK.

  1. Effectuez l'exercice Créer l'application Java à l'aide de Spark-Submit et de la trousse SDK, avant d'essayer cet exercice. Les résultats sont utilisés dans cet exercice.
  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écuter une application PySpark
  1. Exécutez l'application à partir de la liste Application. La page Applications avec les trois applications créées dans le cadre de ce tutoriel, en ordre chronologique inverse. Le tableau listant les applications contient cinq colonnes, Nom, Langage, Responsable, Créé et Mis à jour. À la fin de chaque rangée se trouve un menu kebab. Pour l'exemple 3 du tutoriel, le menu kebab a été activé et les options sont affichées. Ces options sont Voir les détails, Modifier, Exécuter, Ajouter des marqueurs, Voir les marqueurs et Supprimer. L'utilisateur s'apprête à cliquer sur Exécuter.
  2. Une fois l'exécution terminée, ouvrez-la et naviguez jusqu'aux journaux. Le bas de la page Détails d'exécution. En dessous des détails se trouve la section Journaux. Elle répertorie les fichiers journaux disponibles dans un tableau de cinq colonnes. Les colonnes sont Nom, Taille du fichier, Source, Type et Créé. Les deux fichiers journaux listés sont stdout.log et stderr.log. À gauche, il y a une petite section nommée Ressources. Elle contient deux liens, Journaux et Ressources. Journaux est sélectionné.

  3. Ouvrez le fichier spark_application_stdout.log.gz. Votre sortie doit être identique à la suivante : La sortie du fichier spark_application_stdout.log.gz. Il s'agit d'un tableau de six colonnes. Les colonnes sont id, name, features, price, prediction et value. Seules les 20 premières rangées sont affichées. Toutes les cellules sont alimentées.
  4. Dans cette sortie, vous voyez que l'ID fiche descriptive 690578 est la meilleure offre avec un prix prévu de 313,70 $ par rapport au prix de catalogue 35,00 $, pour une superficie de 4 639 pieds carrés. Si cela semble trop beau pour être vrai, l'ID unique vous permet de forer dans les données afin de mieux comprendre si cette offre est vraiment très avantageuse ou non. Ainsi, un analyste d'affaires pourrait facilement utiliser la sortie de cet algorithme d'apprentissage automatique pour approfondir son analyse.

Étape suivante

Vous pouvez maintenant créer et exécuter des applications Java, Python ou SQL avec le service Flux de données et explorer les résultats.

Le service de flux de données prend en charge tous les détails du déploiement, de la panne, de la gestion des journaux, de la sécurité et de l'accès à l'interface utilisateur. Avec le service de flux de données, vous pouvez vous concentrer sur le développement d'applications Spark sans vous soucier de l'infrastructure.