Hadoop - Semaine 6. Hadoop - Semaine 6. Pierre Nerzic. février-mars / 18 Pierre Nerzic

Documents pareils
ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Langage SQL : créer et interroger une base

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

1 Introduction et installation

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Table des matières INITIATION À SPARK AVEC JAVA 8 ET SCALA

TP Contraintes - Triggers

BIRT (Business Intelligence and Reporting Tools)

Le langage SQL Rappels

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

TP Bases de données réparties

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

td3a correction session7az

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Présentation Windows Azure Hadoop Big Data - BI

Bases de données avancées Introduction

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

Introduction au Système de Gestion de Base de Données et aux Base de Données

Java et les bases de données

Optimisation SQL. Quelques règles de bases

Bases de Données relationnelles et leurs systèmes de Gestion

pyensae StockPrices September 1, Manipulation de séries financières avec la classe StockPrices

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Session S12 Les bases de l optimisation SQL avec DB2 for i

1. Base de données SQLite

A QUOI SERVENT LES BASES DE DONNÉES?

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Cours 4 : Agrégats et GROUP BY

Les bases de l optimisation SQL avec DB2 for i

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

4 Exemples de problèmes MapReduce incrémentaux

Compte Rendu d intégration d application

Mysql avec EasyPhp. 1 er mars 2006

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

A QUOI SERVENT LES BASES DE DONNÉES?

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

Devenez un véritable développeur web en 3 mois!

CREATION WEB DYNAMIQUE

2 Serveurs OLAP et introduction au Data Mining

Hibernate vs. le Cloud Computing

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

ArcGIS 10.1 for Server

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

TD n 10 : Ma première Base de Données

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

SYSTÈMES D INFORMATIONS

BAREME sur 40 points. Informatique - session 2 - Master de psychologie 2006/2007

SQL Historique

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

PHP 5. La base de données MySql. A. Belaïd 1

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Introduction à la B.I. Avec SQL Server 2008

MODE OPERATOIRE OPENOFFICE BASE

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Console IAP Manuel d utilisation

L exclusion mutuelle distribuée

PHP 4 PARTIE : BASE DE DONNEES

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TP2_1 DE BUSINESS INTELLIGENCE ISIMA ZZ3 F3

Mise en œuvre des serveurs d application

les techniques d'extraction, les formulaires et intégration dans un site WEB

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

Introduction aux Bases de Données 2004/2005

Première étape : créer le fichier de données - extraire les données de PMB et les transférer dans Excel

Compétences Business Objects

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : , ISBN 13 :

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Cours: Les Jointures 1

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Bases de données relationnelles

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Les bases fondamentales du langage Transact SQL

Bases de données et sites WEB

Bases de Données et Internet

FACTURATION. Menu. Fonctionnement. Allez dans le menu «Gestion» puis «Facturation» 1 Descriptif du dossier (onglet Facturation)

Introduction à JDBC. Accès aux bases de données en Java

16H Cours / 18H TD / 20H TP

Initiation à Excel. Frédéric Gava (MCF)

PDO : PHP Data Object 1/13

FileMaker 13. Guide de référence SQL

Devoir Data WareHouse

1. Introduction Création d'une requête...2

Exercices et solutions

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Jean-François Boulicaut & Mohand-Saïd Hacid

1 Recherche en table par balayage

Le Langage SQL version Oracle

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

BTS/CGO P10 SYSTEME INFORMATION Année

Oracle Décisionnel : Modèle OLAP et Vue matérialisée D BILEK

Transcription:

Hadoop - Semaine 6 Pierre Nerzic février-mars 2017 1 / 18 Pierre Nerzic

Le cours de cette semaine présente le système. C est une sur-couche de Spark permettant d interroger des données à l aide de SQL directement, et aussi d une API ayant des fonctions identiques. 2 / 18 Pierre Nerzic

3 / 18 Pierre Nerzic

Présentation rajoute une couche simili-sql au dessus des RDD. Ça s appuie sur deux concepts : DataFrames Ce sont des tables : des données sous forme de colonnes nommées. On peut les construire à partir de fichiers JSON, de RDD ou de tables Hive (voir le dernier cours). RDDSchema C est la définition de la structure d un DataFrame. C est la liste des colonnes et de leurs types. Un RDDSchema peut être défini à l aide d un fichier JSON. Il y a des liens entre DataFrame et RDD. Les RDD ne sont que des données, des n-uplets bruts. Les DataFrames sont accompagnées d un schéma. 4 / 18 Pierre Nerzic

Début d un programme Un programme pyspark doit commencer par ceci : #!/usr/bin/python from pyspark import SparkConf, SparkContext, SQLContext from pyspark.sql.functions import * nomappli = "essai1" config = SparkConf().setAppName(nomappli) sc = SparkContext(conf=config) sqlcontext = SQLContext(sc) sqlcontext représente le contexte. C est un objet qui possède plusieurs méthodes dont celles qui créent des DataFrames et celles qui permettent de lancer des requêtes SQL. 5 / 18 Pierre Nerzic

Créer un DataFrame Il y a plusieurs manières de créer un DataFrame. Il faut à la fois fournir le schéma (noms et types des colonnes) et les données. L une des méthodes simples consiste à utiliser un fichier JSON. Un fichier JSON est pratique car il contient à la fois les données et le schéma, mais ça ne convient que pour de petites données. Un fichier JSON contient la sérialisation d une structure de données JavaScript. Pour les données qui nous intéressent, c est simple. Chaque n-uplet est englobé par {...} ; les champs sont écrits "nom":"valeur". Voici un exemple de trois n-uplets : {"nom":"paul"} {"nom":"émile", "age":30} {"nom":"victor", "age":19} 6 / 18 Pierre Nerzic

Créer un DataFrame à partir d un fichier JSON a évolué, alors la fonction de lecture des JSON n est pas la même selon la version : version 1.3 df = sqlcontext.jsonfile("nom.json") version 1.4 df = sqlcontext.read.json("nom.json") Elles retournent un DataFrame df contenant les données. Voir plus loin ce qu on peut en faire. A savoir qu un DataFrame ainsi créé ne connaît pas les types des colonnes, seulement leurs noms. 7 / 18 Pierre Nerzic

Créer un DataFrame à partir d un RDD C est plus compliqué car il faut indiquer le schéma. Un schéma est une liste de StructField. Chacun est un couple (nom, type). # création d'un RDD sur le fichier personnes.csv fichier = sc.textfile("hdfs:/tmp/personnes.csv") tableau = fichier.map(lambda ligne: ligne.split(";")) # définition du schéma champ1 = StructField("nom", StringType) champ2 = StructField("age", IntType) schema = [champ1, champ2] # création d'un DataFrame sur le RDD personnes = sqlcontext.createdataframe(tableau, schema) df est un DataFrame contenant les données et le schéma. 8 / 18 Pierre Nerzic

Extraction d informations d un DataFrame Il est facile d extraire une colonne d un DataFrame : colonneage = df.age Note: si une propriété est vide ou vaut null, python voit None. La propriété columns retourne la liste des noms des colonnes : print df.columns La classe DataFrame possède de nombreuses méthodes qui seront présentées plus loin, page 15. 9 / 18 Pierre Nerzic

Donner un nom de table SQL à un DataFrame Cela consiste à donner un nom désignant la future table SQL contenue dans le DataFrame. C est une opération nécessaire pour exécuter des requêtes SQL. En effet, la variable personnes contenant le DataFrame ne connaît pas son propre nom. personnes.registertemptable("personnes") Le DataFrame df pourra être utilisé dans une requête SQL sous le nom personnes. Il est donc commode de remettre le même nom que le DataFrame. NB: ce n est qu une table temporaire, elle disparaît à la fin du programme. 10 / 18 Pierre Nerzic

Exemple de requête SQL Une fois que le DataFrame est rempli et nommé, on peut l interroger. Il y a plusieurs moyens. Le premier est d écrire directement une requête SQL. resultat = sqlcontext.sql("select nom FROM personnes") for nuplet in resultat.collect(): print nuplet.nom Le résultat de la méthode sql est un nouveau DataFrame contenant les n-uplets demandés (documentation). On les affiche à l aide d une simple boucle et d un appel à collect() comme en pyspark. Un autre moyen pour écrire des requêtes est d appeler les méthodes de l API. 11 / 18 Pierre Nerzic

API API 12 / 18 Pierre Nerzic

API Aperçu L API pour Python est très complète. Elle comprend plusieurs classes ayant chacune de nombreuses méthodes : DataFrame représente une table de données relationnelles Column représente une colonne d un DataFrame Row représente l un des n-uplets d un DataFrame Ces classes permettent d écrire une requête SQL autrement qu en SQL, à l aide d appels de méthodes enchaînés. 13 / 18 Pierre Nerzic

API Exemple de requête par l API Soit une table de clients (idclient, nom) et une table d achats (idachat, idclient, montant). On veut afficher les noms des clients ayant fait au moins un achat d un montant supérieur à 30. En SQL, on l écrirait : SELECT DISTINCT nom FROM achats, clients WHERE achats.idclient = clients.idclient AND achats.montant > 30.0; En py : resultat = achats.filter(achats.montant > 30.0) \.join(clients, clients.idclient == achats.idclient) \.select("nom") \.distinct() 14 / 18 Pierre Nerzic

API Classe DataFrame C est la classe principale. Elle définit des méthodes à appliquer aux tables. Il y en a quelques unes à connaître : filter(condition) retourne un nouveau DataFrame qui ne contient que les n-uplets qui satisfont la condition. Cette condition peut être écrite dans une chaîne SQL ou sous forme d une condition Python. resultat = achats.filter("montant > 30.0") resultat = achats.filter(achats.montant > 30.0) Remarquer la différence de nommage des champs. 15 / 18 Pierre Nerzic

API Méthodes de DataFrame count() retourne le nombre de n-uplets du DataFrame concerné. distinct() retourne un nouveau DataFrame ne contenant que les n-uplets distincts limit(n) retourne un nouveau DataFrame ne contenant que les n premiers n-uplets join(autre, condition, type) fait une jointure entre self et autre sur la condition. Le type de jointure est une chaîne parmi "inner" (défaut), "outer", "left_outer", "right_outer" et "semijoin" collect() retourne le contenu de self sous forme d une liste de Row. On peut l utiliser pour un affichage final : print achats.filter(achats.idclient == 1).collect() 16 / 18 Pierre Nerzic

API Agrégation groupby(colonnes) regroupe les n-uplets qui ont la même valeur pour les colonnes qui sont désignées par une chaîne SQL. Cette méthode retourne un objet appelé GroupedData sur lequel on peut appliquer les méthodes suivantes : count() : nombre d éléments par groupe avg(colonnes) : moyenne des colonnes par groupe max(colonnes), min(colonnes) : max et min des colonnes par groupe sum(colonnes) : addition des colonnes par groupe tapc = achats.groupby("idclient").sum("montant") napc = achats.groupby("idclient").count() L agrégation crée des colonnes appelées d après la fonction : "AVG(montant)", "MAX(montant)", etc. 17 / 18 Pierre Nerzic

API Classement sort(colonnes) classe les n-uplets de self selon les colonnes, dans l ordre croissant. Si on spécifie la colonne par un nom pyspark (table.champ, on peut lui appliquer la méthode desc() pour classer dans l ordre décroissant ; sinon, il faut employer la fonction desc(colonnes) pour classer dans l ordre décroissant. topa = achats.groupby("idclient").sum("montant") \.sort(desc("sum(montant)")).first() La méthode first retourne le premier n-uplet de self. 18 / 18 Pierre Nerzic