November 11, 2021

Multiplying rows in Spark

Earlier this week I checked on a Pull Request that bothered me since I saw it from the first time. Let’s say we work for a bank and we are going to give cash to our clients if they get some people to join our bank. And we have an advertising campaign definition like this: campaign_id inviter_cash receiver_cash FakeBank001 50 30 FakeBank002 40 20 FakeBank003 30 20 And then our BI team defines the schema they want for their dashboards. Read more

November 5, 2021

Regex 101

-You will spend your whole life relearning regex, there is a beginning, but never an end. Last year I participated in some small code problems and practised some regex. I got used to it and feel quite good at it. And today I had to use it again. I had the following dataframe: product attributes 1 (SIZE-36) 2 (COLOR-RED) 3 (SIZE-38, COLOR-BLUE) 4 (COLOR-GREEN, SIZE-39) A wonderful set of strings merged with properties that could vary. And we wanted one column for each: Read more

May 6, 2021

Exportando los datos de firebase

Si trabajamos analizando los datos de una aplicación móvil es muy probable que esté integrado algún sistema para trackear los eventos de la app. Y entre ellos, uno de los más conocidos es Firebase. Estos eventos contienen mucha información útil y nos permiten por ejemplo saber, un usuario que se ha ido cuánto tiempo ha usado la aplicación o cuántos días han pasado. O si realmente ha seguido el flujo de acciones que esperábamos (con un diagrama de sankey podríamos ver donde se han ido los usuarios). Read more

September 29, 2020

Tipos de join en spark

Hace unos días tuve la fortuna (o desgracia) de implementar la lógica más compleja de todo el dominio. El resultado, como esperaba, una etl que fallaba por recursos constantemente. El problema: Caused by: org.apache.spark.SparkException: Could not execute broadcast in 300 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to -1 Lo primero fue revisar el plan de ejecución para ver qué estaba sucediendo. Read more

September 2, 2020

Calcular el domingo de la semana

A la hora de publicar reportes es común agrupar los datos por semanas. Otro motivo es alinearse con el negocio donde los cierres pueden producirse en días concretos, por ejemplo, un domingo. En esos casos si tenemos los datos particionados por días nos interesa saber a qué domingo correspondería cada uno de los datos. Los que venimos de otros entornos tendemos a pensar en esas complicadas librerías de fechas (moment.js, jodatime, etc). Incluso alguien podría pensar en extraer los datos del dataframe y procesarlo en local. Read more

August 25, 2020

Detectando ficheros pequeños Spark

Uno de los mayores problemas de rendimiento que podemos encontrar en los datalakes es tener que mover una enorme cantidad de ficheros pequeños, por el overhead que eso representa en las transacciones. Este post de databricks recomienda https://forums.databricks.com/questions/101/what-is-an-optimal-size-for-file-partitions-using.html que se crearán ficheros de 1GB parquet. Sin embargo mucha gente no sabe cómo detectar esto. Hace poco estuve jugando con un notebook y usando simplemente las herramientas del dbutils pude clasificar los ficheros que tenía en las entidades del datalake en múltiples categorías, así podría estimar cuántos ficheros había en un rango de tiempo. Read more

August 11, 2020

Spark windows functions (I)

En analítica, es muy común hacer uso de las funciones de ventana para distintos cálculos. Hace poco me encontré con un pequeño problema cuya solución mejoró muchísimo al usar las funciones de ventana, demos un poco de contexto. Tenemos una dimensión de usuarios donde los usuarios se van registrando con una fecha y tenemos una tabla de ventas donde tenemos las ventas globales para cada día Y lo que queremos dar es una visión de cómo cada día evoluciona el programa, para ello se quiere que cada día estén tanto las ventas acumuladas como los registros acumulados. Read more

November 9, 2019

Conceptos básicos de Spark

Nota del autor: Todos los contenidos de este artículo son extractos del libro “The Data Engineer’s Guide to Apache Spark” que puedes descargar desde la página de databricks: https://databricks.com/lp/ebook/data-engineer-spark-guide Preludio: Cluster: Un cluster no es más que un conjunto de máquinas trabajando de forma coordinada. Un cluster de Spark se compone de nodos. Uno actúa como DRIVER y es el punto de entrada para el código del usuario. Los otros actúan como EXECUTOR que serán los encargados de realizar las operaciones. Read more

2017-2026 Adrián Abreu