Ir al contenido principal

Spark para conectar con bases de datos vía JDBC

 En mis primeras andadas en lo referente al paquete sparklyr, para este tema en especial, lo que se pretende es usar la librería de JDBC para que este sea el medio de conexión y ese conjunto de datos (dataset) que se extrae, sea manipulado por Spark con todas las ventajas que tiene el paquete como ya lo he descrito en los artículos anteriores.

Me base en tres posts que vienen la final de este artículo.

En primera instancia utilice el conector JDBC para Oracle (ojdbc7.jar) y pues funcionó sin problemas, vamos con la fórmula.

1- Se cargan las librerías.

library("sparklyr")

library("RJDBC")

2- Se carga la configuración de Spark, para después agregar la ruta y nombre del conector JDBC.

## Spark

config <- spark_config()

## Tell config location of oracle jar

config[["sparklyr.jars.default"]] <- "ruta/ojdbc7.jar"



3 - Se crea la conexión, indicándole nuestra variable de configuración.

connspark <- spark_connect(master="local", config = config)


4 - Se usa la función de Spark (spark_read_jdbc) para extraer los datos de la base de datos de Oracle, en este caso las defunciones del 2018.

 dataspark <- spark_read_jdbc(connspark,"table", options = list( url="jdbc:oracle:thin:@//urlserverdb:puerto/servicio", driver="oracle.jdbc.driver.OracleDriver",user="userdb",password="passuserdb",dbtable="TDEFUN18"), memory=FALSE)

Donde el puerto por default para Oracle es el 1521.

Y con esto tenemos un conjunto de datos que representa una tabla de una base de datos, sin embargo al estar redactando el documento, me di cuenta que la columna SEXO y EDO_CIVIL vienen como valores lógicos, entonces me preocupó el hecho de que no respetara el tipo de datos de la tabla origen ya que en Oracle esta definida como numérico. Muestra el código y resultados.


 Lo que se me ocurrió es que en vez de una tabla, lo que traemos es una consulta, a pesar de que en las ligas que consulté había ejemplos, el que se describía era para MySQL, entonces viendo otro ejemplo usando Python fue como deduje la siguiente solución.


 Estuvimos intentando varias opciones hasta que vi que la forma de plasmar la consulta usando un gran paréntesis y fue así como Spark aceptó una consulta en lugar de un nombre de una tabla en el parámetro dbtable

Para resolver el problema del tipo de datos antes de pasar el nombre de la columna lo convertimos a numérico y fue como ahora si Spark recibe una columna de tipo numérico.

Es importante notar que estamos usando otro paquete llamado dplyr que digamos que es el SQL de R y que según me comentaba mi compañero Memo es recomendable su uso para la explotación de datos en R, y será uno de los siguientes artículos de este blog.

Otra cosa importante a considerar es el tiempo de carga ya que en nuestra área se utilizan archivos de gran tamaño y según lo investigado Spark es la opción para este caso.

Sin más por el momento concluimos este artículo. Nos seguimos leyendo.

Atte.

Miguel Araujo

Referencias.

Stackoverflow

https://stackoverflow.com/questions/49221229/use-sparklyr-with-oracle-database-connection

A guide to retrieval and processing of data from relational database systems using Apache Spark and JDBC with R and sparklyr

https://jozef.io/r925-spark-jdbc-loading-data/

DZone Database Zone

https://dzone.com/articles/read-data-from-oracle-database-with-apache-spark


Comentarios

Entradas populares de este blog

Posit Cloud - como instalar librerías de Python en el entorno de R

 Ahora que estamos tomando una maestría buscando que siga "girando la ardilla" por unos años más en la materia de "Cómputo Estadístico" nos ha sugerido usar la versión gratuita de Posit en la nube. En su página definen este producto como "es una solución basada en la nube que permite acceder al poderoso conjunto de herramientas de ciencia de datos de Posit directamente en el navegador web  - sin requerir instalación o configuraciones complejas". Para los usuarios que han utilizado Posit RStudio en primera instancia verán el entorno muy similar a Posit Cloud con algunas pequeñas diferencias, para empezar necesitamos un usuario o contraseña aunque es posible autenticarse usando alguna cuenta existente como es el caso de Google. Con el tiempo y trabajando en desarrollo de software, vamos entendiendo que quizás el nombre queda muy grande a los pequeños ejemplos, pero es muy recomendable el uso de proyectos siempre. A continuación vemos el entorno Posit Clo...

R 4.5 vs R 4.4.3

Cuando comparto con mis colegas, sobre todo de trabajo que es mi nicho profesional, acerca de porque tener las últimas versiones del software y que replico sobre todo por dos vertientes: mejor desempeño y funcionalidad del software, y la seguridad que pareciera que las empresas de software recomiendan los mismo o algo cercano a esto. Por ejemplo, veamos lo que nos dice Oracle (dueño de Java) acerca de su versión 8 del Java SE.   En la tabla de la página de Oracle podemos observar las fechas en los cuales ya no habrá soporte para ciertas versiones de Java. En este breve artículo veremos en el caso del interprete de R como se desempeña en una versión con respecto a la más reciente. Los puestos de trabajo que se registran por los patrones en el IMSS ha sido una cifra que muestra el avance o retroceso de como se encuentra el empleo en nuestro país, en este caso diremos que en el sector formal. Los microdatos oscilan arriba de los 20 millones y para su procesamiento es necesario o divi...

REDATAM en Ubuntu (Linux)

 En un blog alterno, escribí sobre como migraba un "viejo" Intel i5 al sistema operativo Ubuntu en su versión más actual. Me comunique con mi gran colega Lenin de la CELADE en Chile, después de mucho tiempo, y le pedí me diera un pequeño resumen del "estado del arte" de REDATAM me dijo que todo marchaba bien, y pues ahora creo que tengo que actualizarme en contenedores pues el web server se encuentra ahí. Nos pusimos manos a la obra, el instalable desde la página no tiene ninguna extensión de archivo, asumí que era un ejecutable para Linux, no se si la página sufra ataques constantes ya que después quise volver a descargar sin éxito, la página estaba caida, sin embargo rescate el ejecutable anteriormente descargado. Últimamente primero hago y después documento, ya que con todo y mi compañero Deep,  no todo sale a la primera ni como lo dictan sus sugerencias, sobre todo en Linux y MacOS.  Por lo que, les muestro solo el resultado final de esta primera exploración, im...