Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Funciones de agrupación

18/25
Recursos

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Dejo mi aporte con el código de la parte inicial del video en mi versión tratando se seguir el PEP8

medallistaXAnio = deportistaOlimpicoDF \
    .join(
        resultadoDF, 
        deportistaOlimpicoDF.deportista_id == resultadoDF.deportista_id, 
        "left"
    ) \
    .join(
        juegoDF, 
        juegoDF.juego_id == resultadoDF.juego_id, 
        "left"
    ) \
    .join(
        paisesDF, 
        deportistaOlimpicoDF.equipo_id == paisesDF.id, 
        "left"
    ) \
    .join(
        deportesOlimpicosDF, 
        deportesOlimpicosDF.evento_id == resultadoDF.evento_id, 
        "left"
    ) \
    .join(
        deportesDF, 
        deportesOlimpicosDF.deporte_id == deportesDF.deporte_id, 
        "left"
    ) \
    .select(
        "sigla",
        "anio",
        "medalla",
        deportesOlimpicosDF.nombre.alias("Nombre subdisciplina"),
        deportesDF.deporte.alias("Nombre disciplina"),
        deportistaOlimpicoDF.nombre    
    )

medallistaXAnio.show()

Ojo el PEP8 hace énfasis en la legibilidad (readability)

https://www.python.org/dev/peps/pep-0008/

Al ejecutar las operaciones de agregado mediante el método agg obtuve el siguiente error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-53-5fc817f07c73> in <module>
      1 medallistaXAnio2.groupBy("sigla","anio")\
----> 2 .agg(sum("count").alias("TotalMedallas"),\
      3     avg("count").alias("MedallasPromedio")).show()

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Esto debido a que cree un nuevo Notebook sólo para ésta clase, y en clases pasadas Óscar ejecutó la siguiente linea para importar todas las funciones de pyspark.sql.funtions :

from pyspark.sql.functions import *

De manera que fue reemplazada la referencia a la función embebida de python sum() con la de pyspark.sql.functions. Si se encuentran con ese error pueden ya sea importar todas las funciones con import * o cambiarles el nombre e importar sólo la función sum y avg:

from pyspark.sql.functions import sum as _sum
from pyspark.sql.functions import avg as _avg

Aquí les dejo una explicación más detallada.

Si les está dando error en la salida revisen el modelo relacional. Los nombres de los dataframes por parte del prafe están mal asignados y es confuso (Ej. Es probable que el error esté porque no se sabe cual es el data frame de eventos y cual es el de deportes).

Teniendo en cuenta que olympicSportsDF es donde están los deportes con su respectivo id y eventsDF es dodne están los eventos con su respectivo id, esto debería funcionar:

olympicWinnerPerYear = olympicAthletesDF \
            .join(resultsDF, olympicAthletesDF.deportista_id == resultsDF.deportista_id, "left") \
            .join(gameDF, gameDF.juego_id == resultsDF.juego_id, "left") \
            .join(olympicTeamsDF, olympicAthletesDF.equipo_id == olympicTeamsDF.id, "left") \
            .join(eventsDF, eventsDF.evento_id == resultsDF.evento_id, "left") \
            .join(olympicSportsDF, eventsDF.deporte_id == olympicSportsDF.deporte_id, "left") \
            .select("sigla", 
                    "annio",
                    "medalla",
                    eventsDF.nombre.alias("Nombre subdisciplina"),
                    olympicSportsDF.nombre.alias("Nombre Disciplina"),
                    olympicAthletesDF.nombre
                    )

Si quieren redondear el promedio:

from pyspark.sql.functions import sum , avg, round

(medallista_xyear.groupBy('sigla')
 .agg(sum('count').alias('Total de medallas ganadas'),round(avg('count'),2).alias('Primedio por año'))
 .show()
)

Hola compañeros, no entendí a qué se refería el promedio que calculó Óscar ¿Alguien sabe? 🤔

Estimados,

Al seguir los pasos del profesor no pude llegar los mismos resultados de la consulta. Adjunto dataframes y consulta para ver si me pueden ayudar.

Dataframes:

deportistaDF.show()

+-------------+--------------------+-----------+---------+
|deportista_id|              nombre|edadAlJugar|equipo_id|
+-------------+--------------------+-----------+---------+
|            1|           A Dijiang|         24|      199|
|            2|            A Lamusi|         23|      199|
|            3| Gunnar Nielsen Aaby|         24|      273|
|            4|Edgar Lindenau Aabye|         34|      278|
|            5|Christine Jacoba ...|         21|      705|
|            6|     Per Knut Aaland|         31|     1096|
|            7|        John Aalberg|         31|     1096|
|            8|Cornelia Cor Aalt...|         18|      705|
|            9|    Antti Sami Aalto|         26|      350|
|           10|Einar Ferdinand E...|         26|      350|
|           11|  Jorma Ilmari Aalto|         22|      350|
|           12|   Jyri Tapani Aalto|         31|      350|
|           13|  Minna Maarit Aalto|         30|      350|
|           14|Pirjo Hannele Aal...|         32|      350|
|           15|Arvo Ossian Aaltonen|         22|      350|
|           16|Juhamatti Tapio A...|         28|      350|
|           17|Paavo Johannes Aa...|         28|      350|
|           18|Timo Antero Aaltonen|         31|      350|
|           19|Win Valdemar Aalt...|         54|      350|
|           20|  Kjetil Andr Aamodt|         20|      742|
+-------------+--------------------+-----------+---------+
only showing top 20 rows



juegosDF.show()

+--------+-------------+-----+---------+--------------------+
|juego_id| nombre_juego|annio|temporada|              ciudad|
+--------+-------------+-----+---------+--------------------+
|       1|  1896 Verano| 1896|   Verano|              Athina|
|       2|  1900 Verano| 1900|   Verano|               Paris|
|       3|  1904 Verano| 1904|   Verano|           St. Louis|
|       4|  1906 Verano| 1906|   Verano|              Athina|
|       5|  1908 Verano| 1908|   Verano|              London|
|       6|  1912 Verano| 1912|   Verano|           Stockholm|
|       7|  1920 Verano| 1920|   Verano|           Antwerpen|
|       8|1924 Invierno| 1924| Invierno|            Chamonix|
|       9|  1924 Verano| 1924|   Verano|               Paris|
|      10|1928 Invierno| 1928| Invierno|        Sankt Moritz|
|      11|  1928 Verano| 1928|   Verano|           Amsterdam|
|      12|1932 Invierno| 1932| Invierno|         Lake Placid|
|      13|  1932 Verano| 1932|   Verano|         Los Angeles|
|      14|1936 Invierno| 1936| Invierno|Garmisch-Partenki...|
|      15|  1936 Verano| 1936|   Verano|              Berlin|
|      16|1948 Invierno| 1948| Invierno|        Sankt Moritz|
|      17|  1948 Verano| 1948|   Verano|              London|
|      18|1952 Invierno| 1952| Invierno|                Oslo|
|      19|  1952 Verano| 1952|   Verano|            Helsinki|
|      20|1956 Invierno| 1956| Invierno|   Cortina d'Ampezzo|
+--------+-------------+-----+---------+--------------------+
only showing top 20 rows
eventoDF.show()

+---------+--------------------+----------+
|evento_id|              evento|deporte_id|
+---------+--------------------+----------+
|        1|Basketball Men's ...|         1|
|        2|Judo Men's Extra-...|         2|
|        3|Football Men's Fo...|         3|
|        4|Tug-Of-War Men's ...|         4|
|        5|Speed Skating Wom...|         5|
|        6|Speed Skating Wom...|         5|
|        7|Cross Country Ski...|         6|
|        8|Cross Country Ski...|         6|
|        9|Cross Country Ski...|         6|
|       10|Cross Country Ski...|         6|
|       11|Cross Country Ski...|         6|
|       12|Athletics Women's...|         7|
|       13|Athletics Women's...|         7|
|       14|Ice Hockey Men's ...|         8|
|       15|Swimming Men's 40...|         9|
|       16|Badminton Men's S...|        10|
|       17|Sailing Women's W...|        11|
|       18|Biathlon Women's ...|        12|
|       19|Swimming Men's 20...|         9|
|       20|Swimming Men's 40...|         9|
+---------+--------------------+----------+
only showing top 20 rows
deportesDF.show()

+----------+--------------------+
|deporte_id|             deporte|
+----------+--------------------+
|        66|         Aeronautics|
|        65|       Basque Pelota|
|        64|            Alpinism|
|        63|               Roque|
|        62|        Jeu De Paume|
|        61|             Croquet|
|        60| Military Ski Patrol|
|        59|        Motorboating|
|        58|            Racquets|
|        57|             Cricket|
|        56|                Polo|
|        55|            Lacrosse|
|        54|            Skeleton|
|        53|Short Track Speed...|
|        52|               Rugby|
|        51|        Snowboarding|
|        50|             Curling|
|        49|         Ski Jumping|
|        48|           Triathlon|
|        47|    Beach Volleyball|
+----------+--------------------+
only showing top 20 rows

resultadoDF.show()

+------------+-------+-------------+--------+---------+
|resultado_id|medalla|deportista_id|juego_id|evento_id|
+------------+-------+-------------+--------+---------+
|      214106|   Gold|       107506|      15|      765|
|      249072|   Gold|       124694|       7|      764|
|      194997| Silver|        97860|       7|      764|
|      186913| Bronze|        93957|       2|      763|
|      249069|   Gold|       124694|       2|      763|
|      238659| Silver|       119640|       2|      763|
|      238658| Silver|       119640|       2|      762|
|      249067|   Gold|       124694|       2|      762|
|      186912| Bronze|        93957|       2|      762|
|      261963| Silver|       131064|       3|      761|
|      178759|   Gold|        89847|       3|      761|
|      128474| Bronze|        64683|       3|      761|
|      117248| Bronze|        59374|       1|      760|
|      170081|   Gold|        85477|       1|      760|
|      185186| Silver|        93091|       1|      760|
|      142990|     NA|        71755|       1|      759|
|      213106|   Gold|       107006|       1|      759|
|      181754|     NA|        91353|       1|      759|
|      123845|     NA|        62558|       1|      759|
|      115243| Silver|        58394|       1|      759|
+------------+-------+-------------+--------+---------+
only showing top 20 rows

La consulta para visualizar las medallas por años es:

medallistasXAnio = deportistaDF.join(resultadoDF, deportistaDF.deportista_id == resultadoDF.deportista_id, "left")\
    .join(juegosDF, juegosDF.juego_id == resultadoDF.juego_id, "left")\
    .join(paisesDF, deportistaDF.equipo_id == paisesDF.id, "left")\
    .join(eventoDF, eventoDF.evento_id == resultadoDF.evento_id, "left")\
    .join(deportesDF, eventoDF.deporte_id == deportesDF.deporte_id , "left")\
    .select("sigla","annio","medalla",eventoDF.evento.alias("Nombre subdisciplina"),
           deportesDF.deporte.alias("Nombre disciplina"),
           deportistaDF.nombre)
medallistasXAnio.show()

+-----+-----+-------+--------------------+--------------------+--------------------+
|sigla|annio|medalla|Nombre subdisciplina|   Nombre disciplina|              nombre|
+-----+-----+-------+--------------------+--------------------+--------------------+
|  CHN| 1992|     NA|Basketball Men's ...|          Basketball|           A Dijiang|
|  CHN| 2012|     NA|Judo Men's Extra-...|                Judo|            A Lamusi|
|  DEN| 1920|     NA|Football Men's Fo...|            Football| Gunnar Nielsen Aaby|
|  SWE| 1900|   Gold|Tug-Of-War Men's ...|          Tug-Of-War|Edgar Lindenau Aabye|
|  NED| 1994|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  NED| 1994|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  NED| 1992|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  NED| 1992|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  NED| 1988|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  NED| 1988|     NA|Speed Skating Wom...|       Speed Skating|Christine Jacoba ...|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1992|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1992|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1992|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1992|     NA|Cross Country Ski...|Cross Country Skiing|     Per Knut Aaland|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|        John Aalberg|
|  USA| 1994|     NA|Cross Country Ski...|Cross Country Skiing|        John Aalberg|
+-----+-----+-------+--------------------+--------------------+--------------------+

Espero que me puedan ayudar.

Muchas gracias.

Hola dejo por aquí mis resultados de las primeras consultas de la clase. Algunas coinciden con la de mis compañeros y otras… bueno, distan un poco.

Pero ya en el groupBy completamente me salió distinto de todo… Y es que parece ser que por el groupBy el sort no me lo hace correctamente. (Adjunto imagen del sort CON el group by y SIN el)

interesante