No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19 Días
13 Hrs
7 Min
4 Seg

Operaciones numéricas

12/25
Recursos

Aportes 12

Preguntas 1

Ordenar por:

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

Este es mi resultado de conclusionRDD.

¿ A quien le dio el mismo resultado?

[('USA', 32137),
 ('URS', 14834),
 ('GBR', 10925),
 ('GER', 10896),
 ('FRA', 9265),
 ('ITA', 8755),
 ('SWE', 8110),
 ('CAN', 7209),
 ('AUS', 6755),
 ('HUN', 6142),
 ('GDR', 5992),
 ('NOR', 5627),
 ('CHN', 5362),
 ('NED', 5351),
 ('RUS', 5298),
 ('JPN', 4702),
 ('FIN', 4464),
 ('SUI', 3530),
 ('KOR', 3472),
 ('ROU', 3317)]```

Hice un gráfico con los puntos acumulados de los 50 países con más puntos

Si les interesa el código es este:

plt.figure(figsize=(10,5))
plt.scatter(resultado_valor_pais.map(lambda x:x[0]).take(50),resultado_valor_pais.map(lambda x:x[1]).take(50) 
            , color='r')
plt.xticks(rotation=90)
plt.xlabel('Paises',labelpad=15)
plt.ylabel('Puntos',labelpad=15)
plt.show()

Aqui mi resultado:

[('ITA', 74920),
 ('NED', 65560),
 ('GER', 22323),
 ('JPN', 19950),
 ('NZL', 9220),
 ('TCH', 8160),
 ('BLR', 5012),
 ('RSA', 4735),
 ('TUR', 3965),
 ('GHA', 3430)]

Creo que para comodidad de todos, y poder entender spark. Creo que es importante saber algo de programción funcional. Platzi tiene uno con scala, veanlo para sacarle más provecho es estas clases

Me da el mismo resultado de los que hicieron la modificación en el código:

conclusion = PaisesMedallas3.reduceByKey((add)).sortBy(lambda x: [x[1]], ascending=False)
conclusion.take(5)
[('USA', 32137), ('URS', 14834), ('GBR', 10925), ('GER', 10896), ('FRA', 9265)]

Mi solución, sin usar:

from operator import add

Aquí está el código que usé para obtener el mismo resultado, pero sin importar operator:

paises_medallas.groupByKey().mapValues(sum).sortBy(lambda row:row[1],ascending=False)

En una situación de la vida real es importante tener sensibilidad de los números del negocio y hacer una conciliación con alguna cifra conocida, por ejemplo en este caso habría que dudar del resultado, si tenemos el contexto de que Estados Unidos y Rusia han sido punteros siempre en juegos Olímpicos, situación que el resultado del código no refleja.

A mi me dio uno muy parecido jose

from pyspark.sql import SparkSession
from operator import add

Crear una instancia de SparkSession

spark = SparkSession.builder
.appName(“Mi aplicacion de Spark”)
.getOrCreate()

Obtener el contexto de Spark

sc = spark.sparkContext

Ruta del archivo CSV

path = “C:\Users\Benja\OneDrive\Escritorio\curso-apache-spark-platzi-master\files\”

Leer el archivo CSV y aplicar la transformación

equiposOlimpicosRDD = sc.textFile(path + “paises.csv”)
.map(lambda line: line.split(","))

Leer el archivo de resultados

resultado = sc.textFile(path + “resultados.csv”)
.map(lambda line: line.split(","))

Filtrar resultados y obtener ganadores

resultadoGanador = resultado.filter(lambda line: ‘NA’ not in line[1])

Obtener valores de las medallas

valoresMedallas = {
‘Gold’: 7,
‘Silver’: 5,
‘Bronze’: 4
}

Realizar join entre deportistas, países y resultados

deportistapaises = deportistaOlimpicoRDD.map(lambda l: [l[-1], l[:-1]])
.join(equiposOlimpicosRDD.map(lambda x: [x[0], x[2]]))

paisesMedallas = deportistapaises.join(resultadoGanador)

Calcular la suma de las medallas por país

paisesMedallas_rdd = paisesMedallas.map(lambda x: (x[1][0][-1], valoresMedallas[x[1][1]]))
conclusion = paisesMedallas_rdd.groupByKey().mapValues(sum).sortBy(lambda row: row[1], ascending=False)

Obtener el resultado

resultado_final = conclusion.collect()

Imprimir el resultado

for pais, medallas in resultado_final:
print(pais, medallas)

interesante

Aca mis resultados.
Aun me sigue costando entender la funcion Lambda-Map-Reduce