Ir al contenido principal

Comparativa consultas a base de datos Oracle vs archivo de texto plano usando R-Spark-JDBC

Podemos decir que a veces los pequeños cambios pueden provocar resultados muy favorables sobre todo en el desempeño de alguna tarea manual o automatizada y fiel a mi afiliación a la cultura pop :) recordé el filme del efecto mariposa.

Pues bien empezamos a hacer pruebas con Apache Spark ya no con archivos de texto, sino con la conexión a base de datos que en pasados artículos ya habíamos platicado pero ahora con mediciones en los tiempos.

Las primeras comparaciones fueron muy decepcionantes ya que usando la conexión a la base de datos de Oracle la realizaba un poco más de 10 veces más lento que consultando el mismo número de registros con un archivo de texto, la primer prueba muy básica y sencilla: un archivo de  casi 18 millones de registros (17,953,202) consultados desde una tabla de una base de datos de Oracle contra el mismo número de renglones de un archivo de texto que realizará dicho conteo usando instrucciones dplyr.

Sin embargo nuevamente el buen Edgar se fijó en el código que había investigado y le llamó la atención un atributo en FALSE, el de memory.

test_qry <- sparklyr::spark_read_jdbc(

  sc = connspark,

  name = "tpuestos",

  options = jdbcConnectionOpts,

  memory = TRUE

)

Por lo que ahora al hacer la prueba los resultados ya son muy similares en los tiempos porque de acuerdo a lo investigado Apache Spark puede utilizar todos los recursos del equipo donde se ejecuta (memoria en disco y RAM) inclusive los servicios a los que se conecta como el ancho de banda de la red.

Dejo aquí código de ambos scripts de R y sus resultados.

Archivo de texto (CSV)

Podemos observar que para la carga del archivo CSV se realizó casi en 56 segundos mientras que la consulta la realizó en menos de 1 segundo (0.81)


En este código no viene el atributo memory por lo que por omisión queda en TRUE.

Base de datos de Oracle


Podemos observar que para la carga de la tabla en el dataset de Apache Spark se realizó casi en 40 segundos mientras que la consulta la realizó al igual que el archivo csv en menos de 1 segundo (0.7)

Una de las cosas que notó el compañero era la ausencia de una de las pestañas del monitor web de Spark (Storage) y fue como se dedujo que había que cambiar dicho atributo.

Por lo que, el esquema de consultar la información desde una base de datos versus un archivo de texto resulta más adecuada por todas las ventajas que tiene el usar un motor de base de datos robusto como lo es Oracle.

Hasta aquí el resultado de este Bechmark, y en breve si todo va bien dejaré por aquí la instalación de un cluster de Spark usando Yarn, esto con la venía del creador del tutorial en vídeo Joshua Hruzik, hasta otro artículo.

Atte.
Miguel Araujo.
Nuevamente se agradece el aporte del compañero Edgar Soriano para la realización de este bechmark.

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...

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...

El problema del gallo - otra vertiente de usar Python en RMarkdown con Posit RStudio

Cuando pensamos que ya se había cruzado el río, el buen gallo - mi amigo el Dany  Lara- no podía insertar código de Python  en un documento de RMarkdown  usando la versión de escritorio de Posit RStudio a pesar de las soluciones como instalar el Python y direccionarlo desde R con la biblioteca reticulate . Si bien se podía ejecutar código del interprete base, al querer correr usando módulos y con ello intentando instalar dichos módulos mandaba el siguiente mensaje: > py_install('matplotlib') Using virtual environment "D:/tu_usuario/Documents/.virtualenvs/r-reticulate" ... WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)'))': /simple/matplotlib/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) a...