Ir al contenido principal

Nuevas equivalencias (y diferencias) en los paquetes DBI y Dplyr en R (1)

Parece ser que es complicado el manipular una colección de datos que regresa una consulta realizada usando el paquete dplyr junto con Apache Spark, al decir complicado, me refiero a que no podemos manipularlo al igual que un dataframe que tiene características muy parecidas a una tabla o colección de otro lenguaje de programación.

Me clavé en una investigación que me llevó algunas horas (2 o 3) y aunque todavía no encuentro algo concluyente parece ser que no es posible traer los elementos individuales de dicha colección, pareciera que  es debido al gran tamaño que pueden tener.

La siguiente información viene del sitio "RDD Programming Guide - Spark 3.3.0 Documentation" que documenta las acciones que se tienen para manipular estos datasets y según comparándola con otra bibliografía collect() transforma el RDD en un objeto de R para nuestro caso.

"collect() - Regresa todos los elementos del dataset como un arreglo en el controlador (driver) del programa. Esto es usualmente útil después de filtrar o ejecutar otra operación que regrese un subconjunto de datos suficientemente pequeño".

Veamos lo que les menciono a través de este ejemplo:


 La consulta anterior devuelve las viviendas que tienen más de 3 baños junto con el dato trimestre, si queremos mostrar el resultado, en la consola de R vamos a escribir el nombre del objeto y presionamos la tecla "Enter".



Por lo que si quiero accesar al primer registro como si fuera un dataframe de R, marca lo siguiente:

> query2[1,1]

Error in `[.tbl_spark`(query2, 1, 1) : unused argument (1)

Como lo mencioné al principio me di a la tarea de buscar con más profundidad esta situación ya que en mi imaginario creía que se podían accesar elementos individuales de los RDD, entonces en un sitio de la Universidad de Údine algún profesor elaboró una guía de R para ciencia de datos y nos dice lo siguiente:

"Hay muchas razones por la que tu podrías querer mover tus datos de Spark a R. Ya has visto como algunos datos se mueven de Spark a R cuando quieres imprimirlos. Necesitas también obtener tu conjunto de datos (dataset) si tu quieres graficarlo, o si quieres usar una técnica de modelado que no este disponible en Spark.

  • 'copy_to()'  convierte tus datos de R a Spark.
  • 'collect()' convierte tus datos de Spark a R."

Entonces aplicamos la acción collect() para tratarlo como dataframe.



Aquí podemos observar la diferencia entre ambos objetos con la función class.

> class(query2)

[1] "tbl_spark" "tbl_sql"   "tbl_lazy"  "tbl"      

> class(query3)

[1] "tbl_df"     "tbl"        "data.frame"

Sin embargo no había reparado para el caso de la consulta con el paquete DBI, aquí recreo la misma consulta usando SQL.

Es decir DBI regresa directamente un dataframe.

Tenía entendido y debido a un comentario que nuestro gurú de R que la literatura recomendaba dplyr sobre DBI por su facilidad de uso y que supongo que también derivado de lo que dice el texto de "Mastering Spark with R" en el capítulo 2:

"Cuando usamos dplyr, escribes menos código y es a menudo mucho más fácil de escribir que SQL. Es precisamente por esto que no usaremos SQL en este libro; aunque si tu eres experto en SQL, es viable esta opción para ti (usar el paquete DBI)" 

Otro de mis conflictos era que una vez hecha la consulta en dlpyr era que los resultados eran mandados a memoria secundaria (archivos CSV por ejemplo) y luego manipulados con R cuando podemos ver que con DBI directamente recibimos un dataframe y trabajar cada uno de sus elementos,

En el siguiente artículo vamos a ver como extraer los cabeceros de un archivo de texto para después obtener su tipo de datos en un primer acercamiento.

Miguel Araujo.

Referencias

Página de Apache Spark

https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds

Materiales de Massimo Franceschet de la Universidad de Údine

https://users.dimi.uniud.it/~massimo.franceschet/ds/syllabus/learn/bigdata/Spark/Spark.html

Libro "Mastering Spark with R"

Javier Luraschi, Kevin Kuo, Edgar Ruiz

https://therinspark.com/starting.html#starting-sparklyr-hello-world




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

La librería openxlsx

En el Instituto se utiliza como herramienta de trabajo institucional la suite de ofimática MS Office que ofrece un precio asequible aunque lo actual en el mundo del software es el esquema de suscripciones el que casi se ha convertido en el común de las empresas gigantes de las tecnologías de la información. Es por ello que si bien en un principio que se usaban las bibliotecas XLConnectJars   y XLConnect, al tratar de bajarlas e instalarlas se descubrió - en aquel entonces - que estaban obsoletas. Es por ello que se volteo a la que revisaremos superficialmente en este artículo. Lo primero como siempre es descargar la librería openxlsx que se puede hacer desde el mismo Posit RStudio. Vamos a recrear un cuadro existente en el sitio del Instituto que debido a la crisis sanitaria iniciada en 2020 cobra una relevancia muy importante: "Las principales causas de muerte" que de forma anecdótica   fue la primera aplicación en la cual me pidieron que participara, un programa escri...

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