Ceci est une ancienne révision du document !
Pour l'aide sur l'utilisation de Spark voir ici
Commencer par copier et décompresser dans votre espace de travail le fichier
/Infos/bd/spark/bdle/2015/data/wordcount.txt.bz2
Le fichier obtenu, wordcount.txt (45Mo), contient des statistiques d’accès aux pages Wikimdia en différentes langue. Une ligne de la forme En.d updates 3 24145 indique dans une page écrite en anglais (symbole ‘En’), intitulée ‘updates’ qui a été cliqué 3 fois et qui fait 24145 octets.
Lancer le spark-shell en mode local (voir Doc) en suivant les instructions fournies puis charger le fichier
wordcount.txt
au moyen de la méthode textFile() invoquée à partir de la variable context comme suit :
val data = sc.textFile("<le_chemin_dans_votre_espace_perso>/wordcount.txt")
Ici, la variable data est une RDD, et donc, de type Array tel que vous pouvez le constater sur le shell. L’invocation de la méthode take(n) sur cette variable affiche les n premiers éléments sur une seule ligne. Pour un affichage sur plusieurs lignes (tel un head -n sous linux), utiliser plutôt take(n).foreach(println) qui itère sur les éléments de la variable d’où elle est invoquée et affiche chaque élément sur une ligne séparément. Noter également que la méthode count retourne la cardinalité (nombre d’éléments) de la RDD d’où elle est invoquée. Par soucis de lisibilité de votre code, stocker le résultat de chaque question dans des variables nommées q1, q2, q3 etc. Penser à tester au fur et à mesure le résultat des instructions lorsque celles-ci ne contiennent que des transformations.
Remarque pour partitionner une chaîne de caractères en utilisant le point (.) comme délimiteur à l'aide de la méthode split(), il faut protéger le point avec \, i.e split(“\.”)
Cet exercice s’intéresse à la formulation de jointures simples en Scala. Pour cet exercice, utiliser le jeux de données films (cf Jeux de données) qui contient les fichiers :
Comme d’habitude, commencez par formater les données afin de pouvoir les traiter.
Pour information :
Pour plus d'informations, voir movielens.
Charger et Transformer en tableau de String chaque ligne des fichiers ratings.dat, users.dat et movies.dat dans les variables notes, utilis, et films respectivement en effectuant les conversions de type nécessaires tel que indiqué dans le schéma suivant :
Exprimer en Scala les requêtes suivantes
Remarque : on considère dans un premier temps qu’un genre est représenté par le groupe de genres donné par la chaine de caractères de l’attribut Genres. Dans un second temps, on considère les genres « atomiques » qui sont séparés par des barres « | ». Pour ce faire, déplier les données de films et les stocker dans une valeur intermédiaire films_bis qui contient un nuplet de fims avec un genre à la fois. Par exemple, pour le nuplet (1,Toy Story (1995),Animation|Children's|Comedy) de films, il existe trois nuplets dans films_bis : (1,Toy Story (1995),Animation), (1,Toy Story (1995), Children's) et (1,Toy Story (1995), Comedy). Indice: pour construire films_bis, il est possible d’imbriquer une fonction map à l’intérieur d’une autre (cf. question 2 de l’exercice 3).
En considérant la variable pers de la question précédente, expliquer le résultat des instructions suivantes
et expliquer pourquoi les deux instructions suivantes sont erronées