No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Solución reto joins

17/25
Recursos

Aportes 13

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Note que hay duplicados en el resultado, por lo que le agregue la function distinct()

resultadosDF.join(deportistaOlimpicoDF,\
                 deportistaOlimpicoDF.deportista_id == resultadosDF.deportista_id,
                 "left").join(
                 paisesDF, paisesDF.equipo_id == deportistaOlimpicoDF.equipo_id, 
                 "left").select("medalla", "equipo","sigla").\
                 where(resultadosDF.medalla != "NA").distinct().\
                 sort(col("sigla").desc()).show(20)
+-------+--------------------+-----+
|medalla|              equipo|sigla|
+-------+--------------------+-----+
| Silver|            Zimbabwe|  ZIM|
| Bronze|            Zimbabwe|  ZIM|
|   Gold|            Zimbabwe|  ZIM|
| Silver|              Zambia|  ZAM|
|   Gold|          Yugoslavia|  YUG|
| Silver|          Yugoslavia|  YUG|
| Bronze|          Yugoslavia|  YUG|
| Bronze|West Indies Feder...|  WIF|
| Silver|             Vietnam|  VIE|
|   Gold|             Vietnam|  VIE|
|   Gold|           Venezuela|  VEN|
| Bronze|           Venezuela|  VEN|
| Silver|           Venezuela|  VEN|```

¿Influye en el tiempo de procesamiento el orden en el que ponemos las funciones o Spark ya tiene optimizada esta parte?
No es lo mismo hacer un sort y después un filter, que hacer el filter y luego el sort por la cantidad de rows y la naturaleza del algoritmo de ordenamiento.

Mi pregunta es: ¿debo de poner atención a eso o Spark lo hace en automático?

Tengo la duda respecto a respetar PEP8 y la recomendación de que los JOIN se deben escribir en una sola línea, en mi caso aunque resolví el reto anterior igual tome la parte que hizo el profesor, aquí mi aporte

resultadoDF.filter(resultadoDF.medalla != "NA") \
    .join(
        deportistaOlimpicoDF,
        resultadoDF.deportista_id == deportistaOlimpicoDF.deportista_id,
        "left"
    ) \
    .join(
        paisesDF,
        deportistaOlimpicoDF.equipo_id == paisesDF.id,
        "left"
    ) \
    .select("medalla", paisesDF.equipo, paisesDF.sigla) \
    .sort(col("sigla").desc()) \
    .show()

Yo noté que si los ordenamos de manera ascendente existen datos en País y Nombre del equipo “null” por lo que guardé todo el código del profe en una variable llamada " retoClase16 " y le agregué este filtro al final:


retoClase16.filter( (retoClase16.País != "null")).show()
+-------+--------------------+----+
|medalla|   Nombre del equipo|País|
+-------+--------------------+----+
| Bronze|         Afghanistan| AFG|
| Bronze|         Afghanistan| AFG|
| Silver|Netherlands Antilles| AHO|
|   Gold|             Albania| ALB|
| Bronze|             Albania| ALB|
| Silver|             Albania| ALB|
| Silver|             Algeria| ALG|
| Bronze|             Algeria| ALG|
|   Gold|             Algeria| ALG|
| Silver|             Algeria| ALG|
| Bronze|             Algeria| ALG|
|   Gold|             Algeria| ALG|
| Bronze|             Algeria| ALG|
| Bronze|             Algeria| ALG|
|   Gold|             Algeria| ALG|
| Silver|             Algeria| ALG|
| Bronze|             Algeria| ALG|
|   Gold|             Algeria| ALG|
| Bronze|             Algeria| ALG|
| Bronze|             Algeria| ALG|
+-------+--------------------+----+
only showing top 20 rows

Les comparto una captura de mi salida.

Solución con sort

deportistasDF.join(resultadosDF, deportistasDF.deportista_id == resultadosDF.deportista_id, "left") \
.join(paisesDF, paisesDF.id == deportistasDF.equipo_id, "left") \
.select(
    "medalla", 
    col("sigla").alias("pais"),
    "equipo"
) \
.where(resultadosDF.medalla != "NA") \
.sort(col("sigla").asc()).show()

Hice un TOP 10 de los quipos con más y con menos medallas ganadas
Llevo 6 Años desde que aprendí SQL y hoy en día trato de utilizarlo y de llevarlo en cada cosa que aprendo y esto es prueba de ello (Spark y SQL ❤)

Hola a todos, agregue un groupby para mejorar la lectura y saber cuantas medalla por pais hay.

resultadoDF.filter(resultadoDF.medalla != "NA") \
    .join(deportistaOlimpicoDF,deportistaOlimpicoDF.deportista_id == resultadoDF.deportista_id,"left") \
    .join(paisesDF,paisesDF.id == deportistaOlimpicoDF.equipo_id, "left") \
    .select("medalla", "equipo","sigla").groupBy("medalla", "equipo").count().sort( col("count").desc() ).show()

Este curso no me gustó mucho por varios factores, uno de los principales es que siempre obtenía errores en los archivos, no sé si es que en el github los modificaron pero me la he paso es resolviendo errores y modificando cosas para poder seguir el curso bien, por último opté por ver las clases sin seguir nada y estudiar spark por aparte, con algún curso introductorio de YouTube.

También debe corregir algunas cositas de las convenciones python, pero esto son detalles menores.

Comparto mi solución.

Esta fue mi solución, en vez de usar “filter”, usé un “where”:

deportistasDF\
  .join(
      resultadosDF,
      deportistasDF.deportista_id == resultadosDF.deportista_id,
      "left"
    ) \
  .join(
    equiposDF,
    deportistasDF.equipo_id == equiposDF.id,
    "left"
    ) \
  .where(resultadosDF.medalla != 'NA') \
  .select(deportistasDF.nombre,
          "edad_al_jugar",
          "medalla",
          equiposDF.equipo,
          col("sigla").alias("pais_equipo")
         ) \
  .show()

Agregué un nuevo csv en la carpeta files donde detalla los campos y los valores de la tabla género del MR , pero cuando quiero mostrar el contenido del csv en jupyter, me arroja un error indicando que spark no encontró el archivo, entonces hice un Dir para ver el contenido de la carpeta files (Ya que uso windows) y resulta que que no me muestra este archivo, o como que no lo reconoce spark, aunque el archivo esta guardado físicamente en files. A alguien más le pasa esto ? o hay una forma de crear o guardar archivos para que spark los reconozca ??

muy interesante