Azure Data Lake (suite)

Dans la première partie de cet article (Introduction-a-Azure-Data-Lake), nous avons présenté Azure Data Lake et réalisé une première analyse sur des Logs d’un moteur de recherche.

Dans cette seconde partie, nous allons utiliser le complément pour Visual Studio téléchargeable à cette adresse (Azure Data Lake Tools for Visual Studio) pour analyser des Tweets.

 

Upload de données dans l’Azure Data Lake Store (ADLS)

Après avoir téléchargé et installé le complément Data Lake pour Visual Studio, il faut configurer le compte Azure d’accès au service :

Une fois connecté, on retrouve dans l’arborescence « Server Explorer », la partie Data Lake :

Dans le compte Data Lake « Sandbox », on a accès aux bases de données, a l’historique des jobs et aux ADLS :

Il est alors possible, de pré visualiser les données (même si le fichier fait 2To !), et d’uploader aisément via une interface graphique de nouveaux fichiers.

Nous avons téléchargé et ulpoadé les exports des comptes Twitter de FranmerMS, GUSS_FRANCE et PulsWeb via le site internet : https://www.tweetdownload.net/

Voici à quoi ressemblent les fichiers sources :

Voici les différentes méthodes pour uploader des données dans le ADLS :

 

Exécution de Job Azure Data Lake Analytics (ADLA)

Création d’un script U-SQL, cliquez sur « File », « New », « Project… » :

Voici un premier exemple d’analyse du nombre de Tweets par auteurs :

Le fichier d’output sera ordonné par le nombre de Tweets, les auteurs ayant le plus Twitté seront les premiers.

Lorsque l’on soumet le Job U-SQL, celui-ci est valide, buildé. Une fenêtre nous permet alors de choisir le dégrée de parallélisme du traitement.

Il est possible d’investiguer le flux du traitement de données avant l’exécution du Job, dans l’onglet « Design » :

Exécution du Job :

Une fois le Job exécuté, il est possible de diagnostiquer le Job afin d’optimiser son cout, sa rapidité, … :

Ici, sur le parallélisme 10 choisi, seule une unité a été utilisée, donc 9 ne sont pas nécessaires pour ce traitement simple :

U-SQL (SQL & C#)

Le U-SQL pour Unified SQL, unifie la nature déclarative de SQL avec la puissance expressive de C#.

Il est possible de référencer des Assembly pour customiser à volonté en C# les traitements à effectuer.

Ici, sont référencé deux Assemblies pour pouvoir lire des fichiers aux formats JSON (Assemblies-> Register), vous pouvez la télécharger à cette adresse : https://github.com/MicrosoftBigData/usql/tree/master/Examples

Voici comment l’utiliser :

 Remarque : Il est possible de travailler sur tous les fichiers d’un dossier via le caractère « {*} ».

 

Export du résultat de l’analyse dans un Blob Storage (WASB)

Voici un script un peu plus complexe, exportant les données du ADLS vers un Azure Blob Storage après avoir rajouté de l’intelligence aux données :

USE jss2015;

DECLARE @output string = "wasb://tweets@jss2015/";

DECLARE @outputraw string = @output + "/raw.csv";

DECLARE @outputMentioned string = @output + "/mentioned.csv";

DECLARE @outputHTag string = @output + "/htag.csv";

@data =

    EXTRACT

        date string

        , time string

        , author string

        , tweet string

     FROM "/JSS2015/Tweets/{*}.csv"

     USING Extractors.Csv(encoding:Encoding.UTF8);

// Raw

@raw =

    SELECT

        ROW_NUMBER() OVER () AS Id,

        date,

        time,

        author,

        tweet,

        tweet.Contains("RT") AS rt,

        JSS2015.MyUDFs.WordCount(tweet) AS WordCount,

        JSS2015.MyUDFs.Http(tweet) AS Http,

        JSS2015.MyUDFs.Sentiment(tweet) AS Sentiment

    FROM @data;

OUTPUT @raw TO @outputraw USING Outputters.Csv(encoding:Encoding.UTF8);

// Mentioned

@Mentioned1 =

    SELECT

        Id,

        new SQL.ARRAY<string>(tweet.Split(' ').Where(x => x.StartsWith("@"))) AS refs

     FROM @raw;

@Mentioned2 =

    SELECT

        Id,

        r.Substring(1) AS Mentioned

     FROM @Mentioned1 CROSS APPLY EXPLODE(refs) AS Refs(r);

@Mentioned3 =

    SELECT

        Id,

        Mentioned,

        COUNT(*) AS tweetcount

    FROM @Mentioned2

    GROUP BY Id, Mentioned;

OUTPUT @Mentioned3 TO @outputMentioned USING Outputters.Csv(encoding:Encoding.UTF8);

// HTag

@HTag1 =

    SELECT

        Id,

        new SQL.ARRAY<string>(tweet.Split(' ').Where(x => x.StartsWith("#"))) AS refs

     FROM @raw;

@HTag2 =

    SELECT

        Id,

        r.Substring(1) AS HTag

     FROM @HTag1 CROSS APPLY EXPLODE(refs) AS Refs(r);

@HTag3 =

    SELECT

        Id,

        HTag,

        COUNT(*) AS tweetcount

    FROM @HTag2

    GROUP BY Id, HTag;

OUTPUT @HTag3 TO @outputHTag USING Outputters.Csv(encoding:Encoding.UTF8);

 

Chaque fichier U-SQL possède son fichier C# :

Voici le code de celle-ci :

using Microsoft.Analytics.Interfaces;

using Microsoft.Analytics.Types.Sql;

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

namespace JSS2015

{

    public class MyUDFs

    {

        // Word Count

        public static string WordCount(string s)

        {

            return s.Split(' ').Length.ToString();

        }

        // Http presence

        public static string Http(string s)

        {

            return s.Contains("http:").ToString();

        }

        // Basic Sentiment Analysis

        public static string Sentiment(string s)

        {

            string resultat = ":-|";            // Neutral

            if (s.Contains(":-)") == true)     

            {

                resultat = ":-)";               // Happy

            }  

            else if (s.Contains(":-(") == true)

            {

                resultat = ":-(";               // UnHappy

            }

            return resultat;

        }

    }

}

 

Remarque :

-          La fonction WordCount comme son nom l’indique, récupère le nombre de mots dans un texte (ici des Tweets)

-          La fonction HTTP retourne un booléen par rapport à la présence d’une URL dans des Tweets

-          La fonction Sentiment recherche la présence d’émoticône et affecte un sentiment aux Tweets.

 

Trois fichiers sont alors exportés dans le Blob Storage :

 

 

Analyse avec Power BI et les Customized Data Vizualisation

Une fois ces fichiers dans le Blob Storage, on peut utiliser Power BI pour les analyser :

Analyse des Mentions :

 

 Analyse animée des WordCounts :

Analyse des Htags :

Voici l’adresse pour télécharger les Data Visualisation pour Power BI : https://app.powerbi.com/visuals

Bien que dans la démonstration, les données ont été uploadées sur un Blob Storage, la dernière version de Power BI disponible à cette adresse permet d’analyser les données de l’Azure Data Lake Store : https://blogs.msdn.com/b/powerbi/archive/2015/11/20/power-bi-desktop-expanding-list-of-enterprise-data-connectors.aspx

 

Franck Mercier et Romain Casteres