Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdle:tmes:algebrespark

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdle:tmes:algebrespark [25/10/2017 17:50]
hubert [Exercice 1: Requêtes simples sur les données de Yago]
site:enseignement:master:bdle:tmes:algebrespark [09/10/2018 14:12] (Version actuelle)
amine
Ligne 2: Ligne 2:
  
  
-====== [TME II-3] Algèbre Spark: Dataset ======+====== [TME II-2] Algèbre Spark: Dataset ======
 Ce TME aborde le traitement de requêtes Sparql dans la plateforme Spark. Ce TME aborde le traitement de requêtes Sparql dans la plateforme Spark.
   * Formulation des requêtes dans le langage Scala avec les API de Spark RDD et Dataset.   * Formulation des requêtes dans le langage Scala avec les API de Spark RDD et Dataset.
Ligne 17: Ligne 17:
 </​code>​ </​code>​
  
 +<showif isloggedin>​
 +**TODO (oct 2017): page MPI pour sparql endpoint sur Yago**
 +</​showif>​
  
 Aller dans votre répertoire de travail et lancer le spark-shell avec l'​option <fc #​ff0000>​--driver-memory 10G</​fc>​ Aller dans votre répertoire de travail et lancer le spark-shell avec l'​option <fc #​ff0000>​--driver-memory 10G</​fc>​
Ligne 37: Ligne 40:
 Exemple, soient les trois triplets suivants : Exemple, soient les trois triplets suivants :
   (james joue guitare) (marie joue piano) (james ami_de marie) (marie ​ ami_de james)   (james joue guitare) (marie joue piano) (james ami_de marie) (marie ​ ami_de james)
-le motif ( ?x joue piano) retourne la liaison ?x->james+le motif ( ?x joue piano) retourne la liaison ?x->marie
 le motif ( ?x joue ?y) retourne les liaisons ?​x->​james,​ ?y-> guitare d’une part et  le motif ( ?x joue ?y) retourne les liaisons ?​x->​james,​ ?y-> guitare d’une part et 
 ?​x->​maire,​ ?​y->​piano d’autre part. ?​x->​maire,​ ?​y->​piano d’autre part.
Ligne 50: Ligne 53:
  
 ===== Exercice 1: Requêtes simples sur les données de Yago ===== ===== Exercice 1: Requêtes simples sur les données de Yago =====
 +
 +Lire un exemple de données ​
 +<​code>​
 +more /​Infos/​bd/​spark/​dataset/​yago/​yagoMiniSample.txt ​
 +</​code>​
 +Lire la liste des propriétés
 +<​code>​
 +more /​Infos/​bd/​spark/​dataset/​yago/​yagoFacts5M_properties.txt
 +</​code>​
  
 ===Charger le dataset YAGO=== ===Charger le dataset YAGO===
Ligne 130: Ligne 142:
  
 ===R3: Les leaders parisiens === ===R3: Les leaders parisiens ===
 +
 La requête est une **étoile** formée de deux triplets ​ La requête est une **étoile** formée de deux triplets ​
 <code sparql> <code sparql>
Ligne 166: Ligne 179:
  
 ===R4: Les joueurs du royaume uni. === ===R4: Les joueurs du royaume uni. ===
 +
 La requête est un **chemin** formé de deux triplets ​ La requête est un **chemin** formé de deux triplets ​
 <code sparql> <code sparql>
Ligne 189: Ligne 203:
 </​showif>​ </​showif>​
  
-Le résultat ​doit être:+Les 5 premiers éléments du résultat ​sont :
 <​code>​ <​code>​
 |         ​y ​         |       ​x ​           | |         ​y ​         |       ​x ​           |
Ligne 202: Ligne 216:
  
  
-===== Exercice ​: Requêtes sur Freebase=====+ 
 + 
 +===R5: Les acteurs qui influencent des créateurs === 
 + 
 +La requête est un **flocon** (ou snowflake) formé de 5 triplets :  
 +<code sparql>​ 
 +   ?x <​isCitizenOf>​ ?y . 
 +   ?x <​actedIn>​ ?z . 
 +   ?x <​influences>​ ?t . 
 +                   ?t <​livesIn>​ ?u . 
 +                   ?t <​created>​ ?v 
 +</​code>​ 
 + 
 +<showif isloggedin>​ 
 +**<fc #​008000>​REPONSE</​fc>​**  
 + <​code scala> 
 +val t1 = yago.where("​prop = '<​isCitizenOf>'"​). 
 +    withColumnRenamed("​sujet","​x"​). 
 +    withColumnRenamed("​objet","​y"​). 
 +    select("​x","​y"​) 
 + 
 +val t2 = yago.where("​prop = '<​actedIn>'"​). 
 +    withColumnRenamed("​sujet","​x"​). 
 +    withColumnRenamed("​objet","​z"​). 
 +    select("​x","​z"​) 
 + 
 +val t3 = yago.where("​prop = '<​influences>'"​). 
 +    withColumnRenamed("​sujet","​x"​). 
 +    withColumnRenamed("​objet","​t"​). 
 +    select("​x",​ "​t"​) 
 + 
 +val t4 = yago.where("​prop = '<​livesIn>'"​). 
 +    withColumnRenamed("​sujet","​t"​). 
 +    withColumnRenamed("​objet","​u"​). 
 +    select("​t","​u"​) 
 + 
 +val t5 = yago.where("​prop = '<​created>'"​). 
 +    withColumnRenamed("​sujet","​t"​). 
 +    withColumnRenamed("​objet","​v"​). 
 +    select("​t",​ "​v"​) 
 + 
 +val r = t1.join(t2, "​x"​).join(t3,"​x"​).join(t4,"​t"​).join(t5,"​t"​) 
 +r.show(10) 
 + </​code>​ 
 +</​showif>​ 
 + 
 +Le résultat, limité à 10 lignes, doit être: 
 +<​code>​ 
 ++--------------+----------+---------+-----------------+--------------------+----------------+ 
 +|             ​t| ​        ​x| ​       y|                z|                   ​u| ​              v| 
 ++--------------+----------+---------+-----------------+--------------------+----------------+ 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​      <​Cry-Baby>​| ​           <​Dublin>​|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​      <​Cry-Baby>​|<​Republic_of_Irel...|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​   <​Suck_(film)>​| ​           <​Dublin>​|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​   <​Suck_(film)>​|<​Republic_of_Irel...|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​|<​Hardware_(film)>​| ​           <​Dublin>​|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​|<​Hardware_(film)>​|<​Republic_of_Irel...|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​      <​Dead_Man>​| ​           <​Dublin>​|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​      <​Dead_Man>​|<​Republic_of_Irel...|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​  <​Gimme_Danger>​| ​           <​Dublin>​|<​Dockers_(film)>​| 
 +|<​Irvine_Welsh>​|<​Iggy_Pop>​|<​Germany>​| ​  <​Gimme_Danger>​|<​Republic_of_Irel...|<​Dockers_(film)>​| 
 ++--------------+----------+---------+-----------------+--------------------+----------------+ 
 + 
 +</​code>​ 
 + 
 + 
 + 
 +===R6: Les paires de personnes mariées et nées dans le même pays === 
 + 
 +===R7: Les personnes influencées par un prix nobel=== 
 + 
 +===R8: L'​acteur ayant joué dans le plus grand nombre de films === 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +===== Exercice ​subsidiaire ​: Requêtes sur Freebase=====
 L’objectif de cet exercice est d’exprimer en Scala les différents types de motifs complexes. L’objectif de cet exercice est d’exprimer en Scala les différents types de motifs complexes.
  
Ligne 264: Ligne 358:
 </​code>​ </​code>​
  
-===== Exercice ​3=====+===== Exercice ​subsidiaire=====
  
 a) A partir de Q4 proposer une requête formant un chemin de longueur 4 puis 5 (avec des propriétés différentes de celles de Q4). a) A partir de Q4 proposer une requête formant un chemin de longueur 4 puis 5 (avec des propriétés différentes de celles de Q4).
site/enseignement/master/bdle/tmes/algebrespark.1508946619.txt.gz · Dernière modification: 25/10/2017 17:50 par hubert