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édentesRévision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdle:tmes:algebrespark [25/10/2017 17:49] – [Exercice 1: Requêtes simples sur les données de Yago] hubertsite: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 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>
 |                  |                  | |                  |                  |
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.1508946593.txt.gz · Dernière modification : de hubert