Databricks : on stream des données dans Power BI en PUSH
Aujourd’hui nous allons voir comment pousser des données en temps réel dans un Dashbord Power BI avec Databricks grâce à la technologie structure streaming de Spark. Le but sera bien sûr de réaliser de magnifiques Dashboard avec des données qui se mettent à jour en temps réel et c’est vraiment la classe à Dallas !
![giphy giphy](http://fadata-blog.com/wp-content/uploads/2020/05/giphy_thumb.gif)
Il existe déjà des tuto sur différents sites qui parlent de streaming avec Databricks et Power BI. Généralement, ils vont soit utiliser un dataset en directquery connecté avec le driver Spark de Power BI, ce qui d’un point de vue perf n’est pas tiptop, soit ajouter d’autres composants comme Azure Stream Analytic en “passe plat” pour qu’il pousse les données dans Power BI. Avec la solution que je vous propose dans cet article, Databricks va directement pousser les données dans Power BI.
Voici comment faire…
Côté Power BI
On va d’abord créer un streaming dataset dans un workspace Power BI
![chrome_nvLSgSxTVB chrome_nvLSgSxTVB](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_nvLSgSxTVB_thumb.png)
Choisir le type “API”
![chrome_djJWg882Wk chrome_djJWg882Wk](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_djJWg882Wk_thumb-1.png)
Définir le nom et la structure de la table : un champ “timestamp” de type DateTime et un champ “value” de type Nombre. Activer aussi l’analyse de données d’historique.
![chrome_i3g0lHiaI0 chrome_i3g0lHiaI0](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_i3g0lHiaI0_thumb.png)
Puis très important, récupérer l’url push que l’on utilisera plus tard
![chrome_Munuoscl4s chrome_Munuoscl4s](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_Munuoscl4s_thumb.png)
Créer un nouveau Dashboard
![chrome_nrECpSWht3 chrome_nrECpSWht3](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_nrECpSWht3_thumb.png)
Puis ajouter des vignettes de type données en temps réel
![9f0F5YBY92 9f0F5YBY92](http://fadata-blog.com/wp-content/uploads/2020/05/9f0F5YBY92_thumb.png)
![8MQR7PA11N 8MQR7PA11N](http://fadata-blog.com/wp-content/uploads/2020/05/8MQR7PA11N_thumb.png)
Sélectionner le dataset streaming que vous venez de créer
![VcoqF2mqNg VcoqF2mqNg](http://fadata-blog.com/wp-content/uploads/2020/05/VcoqF2mqNg_thumb.png)
Choisir par exemple le type carte avec le champ value qui permettra d’afficher la dernière valeur reçu dans le dataset streaming
![OrjNimGBog OrjNimGBog](http://fadata-blog.com/wp-content/uploads/2020/05/OrjNimGBog_thumb.png)
Ajouter d’autres vignettes de la même façon dans votre Dashboard
![chrome_7wEsRRcGC3 chrome_7wEsRRcGC3](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_7wEsRRcGC3_thumb.png)
Coté Databricks
Connectez vous à votre workspace Databricks puis créer un cluster en choisissant la version 2.11 de Scala
![10qRY255nn 10qRY255nn](http://fadata-blog.com/wp-content/uploads/2020/05/10qRY255nn_thumb.png)
Ajouter la librairie “org.scalaj:scalaj-http_2.11:2.4.2” via Maven
![e3Yi3N4VF5 e3Yi3N4VF5](http://fadata-blog.com/wp-content/uploads/2020/05/e3Yi3N4VF5_thumb.png)
Nous allons maintenant créer un nouveau notebook scala connecté à ce cluster, puis coller le code suivant en remplaçant <URL PUSH> par la vraie url du dataset streaming copiée lors de l’étape de création du dataset au début de l’article
import org.joda.time._
import org.joda.time.format._
import scalaj.http._
import org.apache.spark.sql.ForeachWriter
import org.apache.spark.sql._
var urlpbi = "<URL PUSH>"
var stream = spark.readStream.format("rate").load()
def json(timestamp: String, value:String): String = s"""{"timestamp" :"$timestamp","value" :"$value"}"""
val writer = new ForeachWriter[Row] {
override def open(partitionId: Long, version: Long) = true
override def process(row: Row) = {
//println(row)
val url = urlpbi
val result = Http(url).postData(json(row(0).toString, row(1).toString))
.header("Content-Type", "application/json")
.header("Charset", "UTF-8")
.option(HttpOptions.readTimeout(10000)).asString
}
override def close(errorOrNull: Throwable) = {}
}
val query =
stream.writeStream
.foreach(writer)
.start()
Et si tout ce passe bien lorsque l’on exécute le notebook cela donnera ça :
![dbxpbi2 dbxpbi2](http://fadata-blog.com/wp-content/uploads/2020/05/dbxpbi2_thumb-1.gif)
Cet exemple utilise une source streaming de démo qui affiche un compteur qui s’incrémente toutes les secondes.
![chrome_Onj61LCp5Z chrome_Onj61LCp5Z](http://fadata-blog.com/wp-content/uploads/2020/05/chrome_Onj61LCp5Z_thumb.png)
Dans un cas réel, il faudra bien sûr se brancher à une source streaming comme Azure Event Hub ou Azure CosmosDB Changefeed avec de vraies données. Et il faudra aussi prévoir un stockage type Data Lake en parallèle car les Dataset Power BI ne sont pas vraiment persistants : rétention de 200 000 lignes max, puis suppression des lignes les plus anciennes en mode FIFO… Pour la partie code, on peut aussi aller plus loin et faire plus propre en utilisant les API Power BI avec une véritable authentification, au lieu des URL “guest” utilisée dans cet article… mais le principe reste le même ![Smile](http://fadata-blog.com/wp-content/uploads/2020/05/wlEmoticon-smile.png)
Plus d’infos :
FIN
Views:
1 216
https://xn--koupitidik-04a14cx5a.com/
https://xn--kbe-krekort-ggbe.com/
købe kørekort B
https://xn—–7kchclcsdcvgr8afcd9cqkh2f.com/
kupiti vozačku dozvolu B
https://www.fuhrerschein-bekommen.com/
Führerschein kaufen B