¿Cómo funciona Joins en Spark Structured Streaming?

Autor: | Última modificación: 15 de junio de 2022 | Tiempo de Lectura: 4 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

Si estás leyendo este post seguro que tienes algún interés por el Big Data o por el análisis de datos. Afortunadamente, la información sobre cómo funciona Joins en Spark Structured Streaming te aportará un amplio panorama del servicio de computación Apache Spark. Esta tecnología es muy útil para acercarte a los sistemas de computación más populares dentro del mundo Big Data.

Conocer las diferentes formas de hacer joins en el sistema Apache Spark, específicamente, dentro de su arquitectura de Spark Stack, te ayudará a facilitar el procesamiento de los datos por medio de los comandos empleados para este tipo de análisis de la información. Por esta razón, en este post te exponemos cómo funciona Joins en Spark Structured Streaming.

¿Qué es Spark Structured Streaming?

Las Joins en Spark Structured Streaming se desarrollan dentro del entorno de Apache Spark, en su arquitectura de Spark Stack, por lo que conocer cómo se comportan estos sistemas es de suma importancia.

Spark Structured Streaming es un motor de streaming processing construido sobre el motor de SparkSQL. Su principal fin radica en que permite expresar el procesamiento en streaming, al igual que se logra con el procesamiento en batch.

Por otra parte, el desarrollo de las Joins en Spark Structured Streaming se produce dentro de la arquitectura de Spark Stack, el sistema informático de la arquitectura de Apache Spark que posee una gran variedad de componentes que logran potenciarse gracias al motor central del sistema.

Todo ello se desarrolla dentro del sistema de computación de Spark, que es un sistema de computación basado en Hadoop Map Reduce cuya función consiste en dividir y paralelizar los jobs para trabajar con datos de forma distribuida. Allí podrás contar con las siguientes características y funciones de Spark Structured Streaming, que son:

  • Cuenta con un sistema da garantías de procesamiento end-to-end exactly-once con tolerancia a fallos y con mecanismos de checkpointin.
  • Proporciona un sistema de procesamiento en stream rápido y tolerante a los fallos, con garantías de exactly-one, sin que el usuario tenga que saber que se encuentra trabajando sobre un stream de datos.
  • Para el procesamiento, usa un motor de procesamiento en micro-batch que procesa los pequeños lotes de datos, con latencias end-to-end de 100 milisegundos y proporciona garantías exactly-one.
  • Spark2.3 añade el modo Continuos Processing, que permite latencias de un milisegundo y cuenta con garantías atleast-once.

¿Cómo funciona Joins en Spark Structured Streaming?

Structured Streaming soporta hacer joins con dataset estáticos y con otros streams como:

Stream-Static

No necesita mantener el estado. El stream de datos hace join con el dataset estático previamente cargado en memoria.

val staticDf = spark.read. …
val streamingDf = spark.readStream.

streamingDf.join(staticDf, «type»)
streamingDf.join(staticDf, «type», «right_join»)

Stream-Stream

La función Join de Stream-Stream necesita mantener el estado de los streams para asegurar que eventos que llegan en diferentes momentos en el tiempo hagan join.

Para ello, debes seguir una dupla de pasos que ayudarán al sistema a llevar a cabo estas Joins en Spark Structured Streaming:

  • En primer lugar, definir las marcas de agua (watermarks) una vez se vaya a gestionar la memoria.
  • En segunda instancia, poder definir las condiciones del join adicionales, de forma que puedas identificar cuándo las entradas dejarán de hacer match con las entradas futuras.

Condiciones de joins adicionales

Por otra parte, también podrás encontrar estas condiciones adicionales de las Joins en Spark Structured Streaming que podrás dividir en dos tipos:

  • Condiciones de rango de tiempo: tal como su nombre indica, estas se realizan en cuanto a una unión de tiempo. A continuación, te exponemos cómo se visualiza en el desarrollo de los comandos de la consola:

JOIN ON
leftTime BETWEEN
rightTime AND rightTime + INTERVAL 1 HOUR

  • Condiciones en ventana de tiempo: para este tipo de joins se establece en el sistema un rango restringido de tiempo, por medio del que Apache Spark discrimina los datos que no pertenecen a esta secuencia.

JOIN ON leftTimeWindow = rightTimeWindow

Finalmente, lo que logra cada una de estas condiciones es ayudar a que el sistema de Apache Spark pueda descartar datos a la hora de ejecutar los joins entre los dos streams.

Ejemplo de Joins en Spark Structured Streaming

A continuación, te compartimos un breve ejemplo de cómo se desprenden estos joins en la consola de Apache Spark:

import org.apache.spark.sql.functions.expr
val impressions = spark.readStream. …
val clicks = spark.readStream. …
// Apply watermarks on event-time columns
val impressionsWithWatermark = impressions.withWatermark(
«impressionTime», «2 hours”
)
val clicksWithWatermark = clicks.withWatermark(«clickTime», «3 hours»)
// Join with event-time constraints
impressionsWithWatermark.join(
clicksWithWatermark,
expr(«»»
clickAdId = impressionAdId AND
clickTime >= impressionTime AND
clickTime <= impressionTime + interval 1 hour
«»»)
)

Instrúyete más sobre el procesamiento Big Data

Por medio de este post, te hemos expuesto cómo funciona Joins en Spark Structured Streaming dentro del mundo de procesamiento ofrecido por Apache Spark. Sin embargo, debes tener en cuenta que este proceso es solo uno de los muchos que puedes realizar con Spark Structured Streaming en tu análisis de datos. Por ello, te recomendamos seguir instruyéndote en el procesamiento de los macrodatos.

Si aún no sabes cómo y quieres aprender en profundidad acerca de las principales herramientas para el procesamiento de los macrodatos, desde KeepCoding te ofrecemos nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine LearningCon este bootcamp, no solo continuarás instruyéndote sobre el Big Data, también podrás hacerlo de manera remota y con el acompañamiento de grandes especialistas en cada uno de sus once módulos de desarrollo. Además, nuestra enseñanza teórica siempre irá de la mano con el ensayo práctico. ¿A qué estás esperando? ¡Inscríbete ahora!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado