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:supports-cours:spark

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:supports-cours:spark [15/11/2018 17:54]
amine [Spark SQL]
site:enseignement:master:bdle:supports-cours:spark [15/11/2018 18:12] (Version actuelle)
amine [Analyser du JSON en Spark SQL]
Ligne 20: Ligne 20:
 </​code>​ </​code>​
  
-===== Spark RDD ===== + 
-Commencer par charger les données en RDD+Les instructions suivantes sont communes aux deux sous-sections qui suivent et permette de charger les fichiers de l'​archive dans des RDD.
  
 <code scala> <code scala>
Ligne 28: Ligne 28:
 val part_t = tpch+"​part.tbl"​ val part_t = tpch+"​part.tbl"​
 </​code>​ </​code>​
 +
 +
 +
 +===== Spark RDD =====
  
 Les instructions suivantes correspondent à la version Q17 simplifiée de TPCH suivante (attention, syntaxe incompatible avec certains compilateurs SQL) Les instructions suivantes correspondent à la version Q17 simplifiée de TPCH suivante (attention, syntaxe incompatible avec certains compilateurs SQL)
Ligne 84: Ligne 88:
  
 ===== Spark SQL ===== ===== Spark SQL =====
 +
 +Le but ici est d'​exprimer la requête Q17 modifiée en dataset. Pour ce faire, commencer par charger les données tout en inférant les types de chaque attribut. ​
 +
  
 <code scala> <code scala>
 +import spark.implicits._
 +
 +
 val lineitem = spark.read.format("​csv"​).option("​header",​true).option("​inferSchema",​true).load(lineitem_t).coalesce(6) val lineitem = spark.read.format("​csv"​).option("​header",​true).option("​inferSchema",​true).load(lineitem_t).coalesce(6)
  
 val part = spark.read.format("​csv"​).option("​header",​true).option("​inferSchema",​true).load(part_t).coalesce(1) val part = spark.read.format("​csv"​).option("​header",​true).option("​inferSchema",​true).load(part_t).coalesce(1)
  
 +</​code>​
  
 +Les instructions suivantes expriment les sous-expression de la requête
 +<​code>​
 +val inner = lineitem.groupBy("​PARTKEY"​).avg("​QUANTITY"​).withColumnRenamed("​avg(QUANTITY)","​p_quantity"​)
 +
 +val outer = lineitem.join(part,​ "​PARTKEY"​).select("​PARTKEY",​ "​QUANTITY",​ "​EXTENDEDPRICE"​)
 +
 +val q17_simp = inner.join(outer,​ "​PARTKEY"​).where("​p_quantity<​QUANTITY"​).agg(sum($"​EXTENDEDPRICE"​)/​7)
 +
 +q17_simp.show()
 </​code>​ </​code>​
 +
 +Pour examiner les plans logiques et physique utiliser le explain
 +<code scala>
 +q17_simp.explain(true)
 +</​code>​
 +Il est aussi possible de visualizer le plan physique et les Stages de l'​exécution en utilisant l'​interface graphique.
 +===== Analyser du JSON en Spark SQL =====
 +Les extrait du cours sont dans <code bash>/​Infos/​bd/​spark/​dataset/​json/​json_samples.tar</​code>​
 +Chaque fichier de l'​archive respecte le format [[http://​jsonlines.org|Json lines]] et contient une collection d'​objets JSON.
 +L'​instruction suivant permet de charger une collection depuis //​fichier.json//​ dans un dataset //coll//
 +
 +<code scala>​val coll = spark.read.json(fichier.json)</​code>​
site/enseignement/master/bdle/supports-cours/spark.1542300899.txt.gz · Dernière modification: 15/11/2018 17:54 par amine