Quand Spark rencontre R

Si vous gardez une oreille attentive à l’actualité data science, vous avez sûrement l’impression que le (petit) monde du big data bouge sans cesse. À dire vrai… vous avez raison ! Les technologies révolutionnaires poussent comme des champignons, venant ringardiser en quelques heures des méthodes bien implantées sur le marché…

C’est le cas notamment de Spark, un jeune framework né en 2010, qui est devenu un projet phare Apache depuis 2014 — l’année où il a détrôné Hadoop au Daytona GraySort Contest. « Au quoi ? » Bonne question, lecteur ! Ce concours met en compétition différentes technologies, qui doivent trier le plus rapidement possible 100 To de données. Le résultat de cette édition : un temps de tri de 23 minutes avec 206 machines pour Spark — là où le record d’Hadoop était de 72 minutes par 2100 machines…

Spark, késako ?

« Wow, qu’est-ce que ça veut dire toutes ces histoires sur plein de ‘machines’ ? ». C’est très simple : avec une structure logicielle comme Spark, il est possible de réaliser des calculs distribués, c’est-à-dire répartir des opérations informatiques sur un grand nombre de microprocesseurs… voire sur plusieurs ordinateurs si les données sont trop volumineuses pour un seul. Le calcul distribué, c’est déjà ce que fait votre ordinateur depuis l’apparition des processeurs « multi-cœurs » — l’intérêt d’une installation locale de Spark étant d’ailleurs de pouvoir faire du multiprocessing sur votre ordinateur. À vous les traitements de volumétries immenses avec 4go de RAM ! 

Comment ça marche ? Pour schématiser, on « découpe » les calculs ou les données, et les traitements sont effectués en même temps sur plusieurs processeurs. Une technique permettant de traiter de gros volumes de données très rapidement, voire en temps (quasi) réel. 

Concrètement, Spark est une structure logicielle open source, que vous pouvez installer sur votre ordinateur, ou (et c’est d’ailleurs là que cela devient intéressant) sur des sessions distantes — « dans le cloud ». La grande force de ce projet Apache étant de pouvoir se connecter à n’importe quelle source de données : en local, mais aussi avec des cluster Hadoop, Hive, et consorts.

Au programme, quatre outils : Spark SQL, pour du requêtage SQL, Spark Streaming, pour du traitement de flux en temps réel, Spark Graph X, pour les données de graphes, et enfin Spark MLib, pour le machine learning. Et vous nous voyez venir… cela fonctionne avec notre langage fétiche — car même si Spark « parle » historiquement en Scala, vous pouvez désormais vous adresser à lui en R.

R et Spark

Pour marier notre logiciel fétiche et Spark, deux solutions : le package historique sparkR, maintenu par databricks (créateur historique de Spark), ou sparklyr, un package développé par les équipes de RStudio. C’est ce dernier que nous prendrons en exemple ici, et pour une bonne raison : splarklyr a été pensé pour fonctionner parfaitement avec dplyr, et directement dans RStudio. 

Une fois Spark installé sur votre ordinateur, rendez-vous sur une nouvelle session RStudio, et chargez le package sparklyr. La fonction spark_connect() vous permet ensuite de créer un objet de « Spark connection ». Votre Spark est local ? Entrez simplement les paramètres spark_connect(master = "local"). L’autre solution ? Si vous avez la dernière version de RStudio, rendez-vous dans l’onglet Spark, dans la fenêtre Environnement de votre session. Ici, « New Connection » vous permet d’établir la connexion. C’est également dans cet onglet que vous trouverez la liste des données disponibles dans votre cluster.

Pour créer un lien avec des clusters dans « l’infonuagique » (big up à nos amis québécois), n’hésitez pas à vous référer à la doc dédiée

C’est bien beau, mais ensuite, on en reste là ? Eh non, vous vous en doutez ! Vous pourrez envoyer des données dans votre cluster avec copy_to(), ou aller les chercher via src_tbls() — pour les amoureux de SQL, les requêtes se feront avec dbGetQuery(). Enfin, pour le machine learning, vous pourrez exécuter toutes les fonctions de Spark, directement dans votre session. Un exemple ? La régression linéaire simple, qui se fait via ml_linear_regression() — pour une liste exhaustive, direction la doc MLib.

Bref, les possibilités de Spark dans R sont nombreuses… et nous n’en sommes qu’au début ! Si vous avez envie d’en savoir plus — on peut en parler 😉   


À propos de l'auteur

Colin Fay

Colin Fay

Data scientist & R Hacker


Commentaires


À lire également