[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