Jonathan Vásquez Alvarado
Diego Alejandro Lesmes
Daniel Felipe Leuro Camacho
Las acciones en Apache Spark son operaciones que se aplican sobre los RDD y se ejecutan de forma inmediata, disparando todas las transformaciones asociadas. Si trabajas con procesamiento de datos distribuido, entender la diferencia entre acciones y transformaciones es la base para usar Spark con criterio.
Y aquí viene el matiz clave: mientras las transformaciones devuelven otro RDD transformado, las acciones nunca modifican ni transforman un RDD. Las acciones son tu manera de interactuar con esos objetos para mostrar contenido o hacer conteos, pero la esencia del RDD queda intacta.
¿Qué diferencia una acción de una transformación en Spark?
La distinción es más sencilla de lo que parece. Las transformaciones construyen nuevos RDD, pero no ejecutan nada por sí solas. La acción es la que dispara el trabajo real.
Cuando aplicas una acción sobre un RDD, Spark ejecuta automáticamente todas las transformaciones que estaban en espera [00:12]. Por eso decimos que las acciones se ejecutan de forma inmediata: son el gatillo de todo el flujo.
¿Las acciones modifican un RDD? No. Las acciones nunca alteran ni transforman un RDD. Solo interactúan con él para mostrar su contenido, contar elementos o devolver valores. Cualquier modificación pertenece siempre a las transformaciones.
Piensa en esto como consultar un objeto sin tocarlo. Si pides el primer elemento o el conteo total, el RDD sigue valiendo exactamente lo mismo que antes.
¿Cómo funcionan count, first y take sobre un RDD?
Estas tres acciones son las más intuitivas para empezar. Todas se aplican sobre un mismo objeto y devuelven información sin cambiarlo.
¿Qué hace la función count en Spark?
La acción count cuenta el número de elementos que tienes en un RDD [01:00]. En el ejemplo, se paraleliza un objeto, se guarda en una variable llamada num y al aplicar count el resultado indica que ese RDD tiene 10 elementos.
¿Qué devuelve count en un RDD? Devuelve la cantidad total de elementos que contiene el RDD. Si paralelizas una lista del 1 al 10,
num.count()te retorna 10.
La función first es igual de directa: retorna el primer elemento del RDD [01:40]. Al hacer num.first, obtienes el 1, porque es el primer valor del objeto creado. Y recuerda: num sigue conservando todos sus valores originales.
¿Para qué sirve la acción take?
La acción take devuelve el número de elementos que tú especifiques [02:20]. Si llamas a take pidiendo los primeros tres elementos, te retorna 1, 2 y 3. Como siempre, se aplica sobre num, así que extrae esos primeros valores de ese mismo RDD.
¿Qué es collect y qué otras acciones existen en Spark?
La acción collect es una de las más usadas a lo largo del trabajo con notebooks [03:00]. Devuelve todos los valores asociados al RDD, es decir, te muestra su contenido completo.
Aplicar collect sobre num te da como resultado la lista entera de valores del RDD. Es la forma habitual de inspeccionar lo que contiene un objeto distribuido.
Pero el abanico de acciones es mucho más amplio. Estas son algunas que vale la pena conocer:
Después de dominar estas operaciones, el siguiente paso es ponerlas a prueba con datos propios.
¿Cómo practicar transformaciones y acciones sobre RDD?
La mejor manera de interiorizar estos conceptos es replicarlos en tu propio entorno de Databricks [03:40]. En los recursos encontrarás un reto diseñado para combinar transformaciones y acciones.
El reto se divide en cinco ejercicios encadenados:
En todos los casos usas el RDD del ejercicio uno, y parte del aprendizaje consiste en investigar conceptos que no se abordaron en detalle. Hay una solución compartida en los recursos, pero resuelve primero por tu cuenta y luego compara.
¿Qué acción de Spark te resulta más útil en tu día a día? Cuéntalo en los comentarios.
Jonathan Vásquez Alvarado
Diego Alejandro Lesmes
Daniel Felipe Leuro Camacho
Juan Camilo Jaramillo Tascón
Layla Scheli
ProfesorElizabeth Ketty Lirion Carbajal
Jesús David Vega Porras
Gabriel Maxemin Ramirez
Carlos Andres Villamizar Gaviria
Jairo Arturo Morán Burgos
Enrique Alejandro Terrazas Huamaní
Alvaro Torres Leon
Layla Scheli
ProfesorJosé Alberto Ortiz Vargas
Layla Scheli
ProfesorDavid Cuellar
Cristian Camilo Cardenas Rodríguez
Emmanuel Aguilar
Layla Scheli
ProfesorMaria Antonia Bermudez Cardona
Layla Scheli
ProfesorChristian Julian Acosta Santamaria
Alejandro Molina Bastidas
Juan Camilo Sánchez
Juan Sebastian Mesa
CARDENAS LOPEZ PAULA ANDREA
Layla Scheli
ProfesorSergio Oyola
Estoy haciendo este curso en el 2026 y seguramente ya estás viendo el Databricks bastante cambiado. Ya no se usa el compute, ahora todo es serverless; el DBFS ya no existe, ahora son Volumes. Databricks está tratando de implementar algo que nombraron: Lake House. Ahora todo está optimizado para que se lea como tablas ordenadas (algo así como un super Snowflake con el poder de Spark) porque incluyeron la parte de Unity Catalog. Todo esto para decir que ya no conviene hacer esos ejercicios con RDDs sino con Dataframes.
lista_nums = list(range(1,10))
df = spark.createDataFrame([(x,) for x in lista_nums], ["numero"])
df.show()
asi como tuplas se pueden asignar mejor el nombre de las columnas. Además el dataframe siempre espera tuplas
df_pares = df1.filter(df1.numero % 2 == 0)
df_pares.show()
df_impares = df1.filter(df1.numero % 2 == 1)
df_impares.show()
df1.agg(
f.max(df1.numero).alias("max"),
f.min(df1.numero).alias("min"),
f.avg(df1.numero).alias("avg"),
f.sum(df1.numero).alias("sum"),
f.count(df1.numero).alias("count")
).show()
o si lo quieres ver mas fancy
display(
df1.agg(
f.max("numero").alias("max"),
f.min("numero").alias("min"),
f.avg("numero").alias("avg"),
f.sum("numero").alias("sum"),
f.count("numero").alias("count")
)
)
df3 = df1.select((df1.numero + 1000).alias("numero"))
df3.show()
luego lo unimos a mi df1:
df_union = df1.unionByName(df3)
display(df_union)
para corroborar
display(
df_union.agg(
f.max("numero").alias("max"),
f.min("numero").alias("min"),
f.avg("numero").alias("avg"),
f.sum("numero").alias("sum"),
f.count("numero").alias("count")
)
)
entonces ahora a los dataframes no es ncesario aplicarles el
parallelize
??
Justamente estaba aplicando lo mismo, muy buen comentario.
Mi respuesta a la tarea:
Gracias :)
mi respuesta del reto1:
Mi solucion
Mi solución:
Mi solución gente:
MI tarea:
Gracias Alvaro :) Felicitaciones!
Asi lo resolvi:
Gracias Jose, por tu aportacion :) Siempre suma!
# ejerciciolista_nros = [1,2,3,4,5,6,7,8,9,10]rdd_homework = sc.parallelize(lista_nros)rdd_homework.collect()#print (f'el RRD esta compuesto por: {rdd_homework}')rdd_par = rdd_homework.filter( lambda x : x % 2 == 0) #filtro para obtener los numeros pares.rdd_par.collect()# maximos y minimos rdd_max = rdd_homework.max()rdd_min = rdd_homework.min()print (f'el maximo es {rdd_max} y el minimo es {rdd_min}')rdd_sumavg = rdd_max + rdd_minrdd_avg = rdd_sumavg / 2print(f'el promedio es: {rdd_avg}')# calculando promedio de la lista de numeros con meanrdd_avg = rdd_homework.mean()print(f'el promedio es: {rdd_avg}')# uniendo dos RDDslista_nrostwo = [1,3,5,7,9,11,13,15,17,19,21]rdd_homeworktwo = sc.parallelize(lista_nrostwo)rdd_homeworktwo.collect()
rdd_join = rdd_homework.union(rdd_homeworktwo)rdd_join.collect()
Done!
Mis respuestas:
Gracias :)
I am a fan of these exercises
Genial :)
Hola!
Comparto mi solución al reto:
#Create a RDD list_1_10 = [1,2,3,4,5,6,7,8,9,10] list_rdd = sc.parallelize(list_1_10) list_rdd.collect() #Filter pair values pair_values = list_rdd.filter(lambda x : x % 2 == 0) pair_values.collect() #Find Max and Min in the list display("The max number of the list is:",list_rdd.max(), "The min number of the list is:",list_rdd.min()) #Find the average of the list display("The average of the list is:", list_rdd.mean()) #Join RDDs join_rdd = list_rdd.union(pair_values) join_rdd.collect() ```#Create a RDDlist\_1\_10 = \[1,2,3,4,5,6,7,8,9,10] list\_rdd = sc.parallelize(list\_1\_10)list\_rdd.collect()
Tuve que trabajar con DF porque con RDD no me permite con la cuenta free, lo intenté
Ya no es posible crear una cuenta en Community Edition? la free edition no permite trabajar con pyspark ni crear clusters
En los ejercicios propuestos, ¿Cuál es la diferencia entre usar mean o hacer el sum/count?
Ninguna, son dos formas diferentes, una manual y otra a traves de una funcion :) Saludos!
Mis respuestas de los ejercicios:
## 1. Creación de un RDD newList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] newRDD = sc.parallelize(newList) newRDD.collect() # 2. Filtrar los elementos pares de un RDD newRDD2 = newRDD.filter(lambda x : x%2 == 0) newRDD2.collect() # 3. Valores máximos y mínimos max1 = newRDD.max() min1 = newRDD.min() max2 = newRDD2.max() min2 = newRDD2.min() print(f'newRDD max: {max1}, newRDD min: {min1}, newRDD2 max = {max2}, newRDD2 min {min2}') # 4. Promedio de los números en un RDD mean1 = newRDD.mean() mean2 = newRDD2.mean() print(f'newRDD mean: {mean1}, newRDD2 mean: {mean2}') # 5. Unión de dos RDDs newRDD3 = newRDD.union(newRDD2).collect() print(f'newRDD3: {newRDD3}')