[R-es] Dos procesos paralelos

jluis.gilsanz en tasacionesh.com jluis.gilsanz en tasacionesh.com
Mie Abr 17 11:35:32 CEST 2013


Hola:

En mi empeño por conseguir que R me muestre cuantos registros lleva 
insertados en una megasubida de datos a un SQL Server, he empezado a mirar 
algo sobre paralelización de procesos en R.

La idea es:
1. Lanzar en un hilo o proceso de R, una función (ya construida), que se 
encarga de consultar en la tabla de SQL cuantos registros se han insertado 
hasta el momento y mostrar una barra de progreso. El código seria algo 
como:

#Parametros de seguimiento de la operación

canal <- channel                        #Canal de conexión  RODBC a SQL 
Server
tab <- "Pruebas_R"              #Nombre de tabla a la que se subirán los 
datos 
a.subir <- as.numeric(nrow(datos))              #Numero de registros a 
subir
en.tabla <- as.numeric(sqlQuery(channel,paste("SELECT Count(*) ", " FROM 
",tab, sep="")))        #Numero de registros que (antes de la subida) 
tiene la tabla
frec <- 1                       #Frecuencia en segundos de la 
actualización de la barra de progreso


#Funcion de seguimiento de la operación
pb <-   function( channel, 
tabla,datos.a.subir,datos.ya.en.tabla,frec.actualiz ){

                        barra <- winProgressBar(title="Subiendo datos a 
SQL ", label = "Subido el:  ", min= 0, max= 1,initial= 0, width = 800)
                        total = 0   #Variable que acumula los registros 
subidos mas los que ya había
 
                        while ( datos.ya.en.tabla + datos.a.subir > total 
)
                                        {
                                        total <- 
sqlQuery(canal,paste("SELECT Count(*) ", " FROM ",tabla, sep=""))
 
                                        porcen <- 
as.numeric((total-datos.ya.en.tabla) / datos.a.subir)

                                        setWinProgressBar(barra, 
porcen,title="SUBIENDO DATOS A SQL", label =paste("Subido el:  ", 
round(porcen *100,0), "% de los datos. Quedan por subir    
",total-datos.a.subir, " registros de ", datos.a.subir, "." , sep=""))
                                        flush.console()
                                        Sys.sleep(frec.actualiz)
                                        }
 
                        close(barra)
                        print("SUBIDA DE DATOS TERMINADA")
                                                                        }

pb(canal,tab,a.subir,en.tabla,frec) 


2.En el otro hilo o proceso se llevaría a cabo la inserción de los 
registros del df datos en la tabla. Este proceso o hilo seria lanzado 
después del proceso anterior. El código seria una sola línea:

sqlSave(channel,datos,tablename =tabla, rownames = FALSE, append=TRUE, 
fast=TRUE )


He estado intentándolo hacer con los paquetes snowfall y Rdsm pero no lo 
he conseguido por mas que leo y releo la ayuda. :-(

Básicamente en lo que fallo es en decirle a R:

Corre por un lado el proceso 1 y luego por otro lado el proceso 2, pero no 
hay manera de inicializar los cluster(en caso de snowfall) y los hilos(en 
caso de Rdsm). Por cierto trabajo con Windows XP asi que la opción del 
paquete multicore no me vale.

Os agradecería que me abrierais los ojos.

GRACIAS

Un saludo.





José Luis Gilsanz Gómez 
Estadística 

Tasaciones Hipotecarias 
María de Molina, 54 - 28006 - Madrid
Tel. : 34-914549694
Fax : 34-917822164
Email : jluis.gilsanz en tasacionesh.com 
Site web: www.tasacionesh.es 





-- AVISO LEGAL --
Los datos personales que en esta comunicación aparecen, así como los que 
nuestra empresa mantiene de Vd. y de su empresa, son tratados con la 
finalidad de mantener el contacto así como realizar las gestiones que en 
esta aparecen (Ley Orgánica 15/1999, de 13 de diciembre, de Protección de 
Datos de Carácter Personal). 
Puede ejercer sus derechos de acceso, rectificación, cancelación y 
oposición dirigiéndose a atencion.clientesth en tasacionesh.com.
La utilización de su dirección de correo electrónico por parte de nuestra 
empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios 
de la Sociedad de la Información y el Comercio Electrónico. Si Vd. recibe 
comunicación comercial por nuestra parte y desea dejar de recibirla, 
rogamos nos lo comunique por vía electrónica a través de la dirección 
atencion.clientesth en tasacionesh.com . 

-- AVISO LEGAL -- 

Los datos personales que en esta comunicación aparecen, así como los que nuestra 
empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener 
el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica 
15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal).   
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición 
dirigiéndose a atencion.clientes en tasacionesh.com 
La utilización de su dirección de correo electrónico por parte de nuestra empresa 
queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de 
la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial por 
nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por vía electrónica 
a través de la dirección atencion.clientes en tasacionesh.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130417/d1d52e6b/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/jpeg
Size: 24195 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130417/d1d52e6b/attachment-0001.jpe>


Más información sobre la lista de distribución R-help-es