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