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:45]
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>
     ?x <​livesIn>​ <​Paris>​ .     ?x <​livesIn>​ <​Paris>​ .
Ligne 143: Ligne 156:
     withColumnRenamed("​sujet","​x"​).     withColumnRenamed("​sujet","​x"​).
     select("​x"​)     select("​x"​)
-t1.show(5) 
  
 val t2 = yago.where("​prop = '<​isLeaderOf>'​ "). val t2 = yago.where("​prop = '<​isLeaderOf>'​ ").
Ligne 149: Ligne 161:
     withColumnRenamed("​objet","​z"​).     withColumnRenamed("​objet","​z"​).
     select("​x","​z"​)     select("​x","​z"​)
-t2.show(5) 
  
 val t1t2 = t1.join(t2, "​x"​) val t1t2 = t1.join(t2, "​x"​)
Ligne 165: Ligne 176:
 +--------------------+--------------------+ +--------------------+--------------------+
 </​code>​ </​code>​
 +
 +
 +===R4: Les joueurs du royaume uni. ===
 +
 +La requête est un **chemin** formé de deux triplets ​
 +<code sparql>
 +      ?x <​playsFor>​ ?y .
 +                    ?y <​isLocatedIn>​ <​United_Kingdom>​
 +</​code>​
 +
 +<showif isloggedin>​
 +**<fc #​008000>​REPONSE</​fc>​** ​
 + <​code scala>
 +val t1 = yago.where("​prop = '<​playsFor>'"​).
 +    withColumnRenamed("​sujet","​x"​).
 +    withColumnRenamed("​objet","​y"​).
 +    select("​x","​y"​)
 +
 +val t2 = yago.where("​prop = '<​isLocatedIn>'​ and objet = '<​United_Kingdom>'"​).
 +    withColumnRenamed("​sujet","​y"​).
 +    select("​y"​)
 +
 +val t1t2 = t1.join(t2, "​y"​)
 +t1t2.show(5)
 + </​code>​
 +</​showif>​
 +
 +Les 5 premiers éléments du résultat sont :
 +<​code>​
 +|         ​y ​         |       ​x ​           |
 ++--------------------+--------------------+
 +|   <​Royal_Air_Force>​| ​     <​George_Ayres>​|
 +|   <​Royal_Air_Force>​|<​Jack_Jones_(foot...|
 +|   <​Royal_Air_Force>​|<​John_Hinton_(foo...|
 +|<​University_of_Ed...|<​James_Craigen_(f...|
 +|<​University_of_Ed...| ​   <​Ronald_Brebner>​|
 ++--------------------+--------------------+
 +</​code>​
 +
 +
 +
 +
 +===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 ​: Requêtes sur Freebase=====+===== 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 231: 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.1508946359.txt.gz · Dernière modification: 25/10/2017 17:45 par hubert