rjava : utilisation parallèle et communication entre deux langages informatiques Julien Troudet

Documents pareils
Développement Logiciel

Projet de programmation (IK3) : TP n 1 Correction

Auto-évaluation Programmation en Java

TP1 : Initiation à Java et Eclipse

Threads. Threads. USTL routier 1

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Synchro et Threads Java TM

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programmer en JAVA. par Tama

Programme Compte bancaire (code)

Cours 1: Java et les objets

Environnements de développement (intégrés)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP1 : Initiation à Java et Eclipse

INITIATION AU LANGAGE JAVA

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Serveur d'archivage 2007 Installation et utilisation de la BD exist

as Architecture des Systèmes d Information

Applet pour visualiser les variables «automate» notifiées

Remote Method Invocation (RMI)

Java Licence Professionnelle CISII,

Programmation Objet Java Correction

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Remote Method Invocation Les classes implémentant Serializable

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Un ordonnanceur stupide

Eclipse atelier Java

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java Licence Professionnelle CISII,

Introduction : les processus. Introduction : les threads. Plan

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction au langage Java

Corrigé des exercices sur les références

Java - la plateforme

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Calcul Parallèle. Cours 5 - JAVA RMI

Langage Java. Classe de première SI

ACTIVITÉ DE PROGRAMMATION

Initiation à JAVA et à la programmation objet.

Package Java.util Classe générique

Derrière toi Une machine virtuelle!

Une introduction à la technologie EJB (2/3)

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Bases Java - Eclipse / Netbeans

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

La JVM. La machine virtuelle Java. La JVM. La JVM

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre 10. Les interfaces Comparable et Comparator 1

Création d une application JEE

La base de données XML exist. A. Belaïd

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Interfaces graphiques avec l API Swing

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Généralités sur le Langage Java et éléments syntaxiques.

Dis papa, c est quoi un bus logiciel réparti?

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

F. Barthélemy. 17 mai 2005

Exercices INF5171 : série #3 (Automne 2012)

LOG4430 : Architecture logicielle et conception avancée

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Java DataBaseConnectivity

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Java 1.5 : principales nouveautés

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

PROGRAMMATION PAR OBJETS

Gestion distribuée (par sockets) de banque en Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

TD2 Programmation concurrentielle

Une introduction à Java

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Tutoriel d installation de Hibernate avec Eclipse

Notion de thread (1/2)

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Programmation Par Objets

OpenPaaS Le réseau social d'entreprise

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RMI le langage Java XII-1 JMF

Problèmes liés à la concurrence

Création d un service web avec NetBeans 5.5 et SJAS 9

TD/TP PAC - Programmation n 3

Programmation Orientée Objet

Création d objet imbriqué sous PowerShell.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Tp 1 correction. Structures de données (IF2)

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP1. Outils Java Eléments de correction

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Transcription:

rjava : utilisation parallèle et communication entre deux langages informatiques Julien Troudet

Pourquoi utiliser rjava (ou JRI)? rjava (Appel de Java dans un script R) Utilisation des Interfaces Homme/Machine (IHM) de Java Bibliothèques spécifiques à Java Parallélisation de certaines taches JRI (Appel de R dans un programme Java) Ajout de fonctionnalités statistiques dans une application Java Packages spécifiques à R

Installation de rjava install.packages('rjava') Pour JRI il faut aussi ajouter aux variables d environnement les localisations des fichiers dll de R et rjava Possibilité d utiliser RJava Eclipse Plugin pour faciliter l utilisation de R dans java (http://www.studytrails.com/rjava-eclipse-plugin/)

Appeler Java depuis R Passage d instructions basiques à la Java Virtual Machine (JVM) library(rjava).jinit() démarre la JVM s <-.jnew("java/lang/string", "Hello World!") nouvel objet java (String).jcall(s,"I","indexOf","World") [1] 6 appel à la méthode indexof de l objet s Objet java Type de retour (Integer) Méthode Paramètre(s)

Appeler Java depuis R Affichage d une fenêtre utilisant les composants awt de java (IHM) f <-.jnew("java/awt/frame", "Hello") b <-.jnew("java/awt/button", "OK").jcall(f, "Ljava/awt/Component;", "add",.jcast(b, "java/awt/component")).jcall(f,, "pack").jcall(f,, "setvisible", TRUE).jcall(f,, "setsize", as.integer(200), as.integer(200))

Créer un package R utilisant Java hellojavaworld - inst - doc - hellojavaworld.rnw - java - hellojavaworld.jar - java - HelloJavaWorld.java - man - hellojavaworld.rd - R - hellojavaworld.r - onload.r - DESCRIPTION - NAMESPACE public class HelloJavaWorld { public String sayhello() { String result = new String("Hello Java World!"); return result; public static void main(string[] args) { hellojavaworld <- function(){ hjw <-.jnew("hellojavaworld") out <-.jcall(hjw, "S", "sayhello") return(out).onload <- function(libname, pkgname) {.jpackage(pkgname, lib.loc = libname)

Appeler R depuis Java Passage d instructions basiques à R Rengine rengine = new Rengine(new String[]{"--vanilla", false, null); nouvelle instance de R int y = 15; un entier Java rengine.assign("y", y); Assignation de y à une variable du même nom dans R rengine.eval("yarray <- c(1:reponse)"); Instruction passée à R double[] yarray = rengine.eval("yarray").asdoublearray(); Récupération de la valeur d une variable R System.out.println(yArray); [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

Appeler R depuis Java Utilisation d un fichier de scripts Rengine rengine = new Rengine(new String[]{"--vanilla", false, null); //création d un objet fichier qui pointe vers un script R File scriptfile = new File("ressources"+File.separator+"script.R"); //modification du chemin (Windows) String pathforr = scriptfile.getabsolutepath().replace("\\", "\\\\") int y = 15; rengine.assign("y", y); rengine.eval(string.format("source('%s')", pathforr)); double[] yarray = rengine.eval("yarray").asdoublearray();

Multithreading Java Thread 1 Thread 2 R Java Thread 1 Thread 2 R n est pas conçu pour utiliser plusieurs processeurs, et implémenter cette fonctionnalité peut être compliqué ou impossible selon les cas. Thread 3 Thread 4 Thread 3 Thread 4 Java est facile à paralléliser et est capable de faire interagir de multiples threads avec une instance unique de R.

Multithreading public void searchforoutliers() { int nthreads = Runtime.getRuntime().availableProcessors(); ExecutorService executorservice = new ThreadPoolExecutor( nthreads, // nombre de thread minimal nthreads*2, // nombre max de threads 1, TimeUnit.MINUTES, new ArrayBlockingQueue<Runnable>(nThreads, true), new ThreadPoolExecutor.CallerRunsPolicy() ); for(species species : listsp){//boucle sur la liste d espèces executorservice.execute(new ProcessusGeoOutliers(species)); executorservice.shutdown(); try { executorservice.awaittermination(3600, TimeUnit.SECONDS); catch (InterruptedException e) { e.printstacktrace(); Création du pool de threads à utiliser et boucle du processus pour détecter les outliers géographiques de chaque espèce.

Multithreading private Species species; private int xeckert, yeckert; public ProcessusGeoOutliers(Species species) { super(); this.species = species; this.xeckert = getxeckert(species); this.yeckert = getyeckert(species); Le processus lance automatiquement la méthode run() à chaque nouvelle instance. Cette méthode fait appel à une fonction utilisant R @Override public void run() { double[] outliers = RScriptExecutor.getGeographicOutliers(xEckert, yeckert); this.species.setoutliers = outliers;

Multithreading public synchronized static double[] getgeographicoutliers(double[] xeckert, double[] yeckert) { rengine.assign("xeckert", xeckert); rengine.assign("yeckert", yeckert); //read the R file rengine.eval(string.format("source('%s')", scriptfilepath); double[] isoutlier = rengine.eval("outlier").asdoublearray(); rengine.eval("rm(list=ls(all=true))"); return isoutlier; La fonction utilise le mot clé «synchronized» ce qui interdit l utilisation simultanée de cette méthode dans plusieurs threads.

Traitement de 650 millions d occurrences Données après traitement: 12 classes 33 millions d occurrences distinctes spatialement Plus de 100 000 espèces Mean number of species / 100 km²

Aller plus loin Hello Java World! A Tutorial for Interfacing to Java Archives inside R Packages. Tobias Verbeke 2014-09-03 Rserve Serveur TCP/IP qui permet de faire interagir des programmes avec un «serveur» R.