A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Acciones de conteo sobre RDDs

10/25
Recursos

Aportes 17

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

El truco de este reto es:

Dado el join que se acaba de realizar entre deportistaOlimpicoRDD y equiposOlimpicosRDD, hay que cambiar el valor llave (el cual es equipo_id) por deportista_id ya que 茅ste valor es quien relaciona la tabla Deportista con la tabla Resultados.

Solo despu茅s de haber realizado el cambio de valor, ya se puede hacer el join. El cambio de llaves se hace simplemente ordenando la informaci贸n con un map().

(deportistaOlimpicoRDD.map(lambda l : [l[-1],l[:-1]]) # Se selecciona la 煤ltima columna del RDD (equipo_id) que es valor eje y el resto de contenidos
                        .join(equiposOlimpicosRDD.map(lambda l : [l[0],l[2]])) # Se selecciona solo el id que es el valor eje y la sigla del pa铆s
                        .map(lambda l : (l[1][0][0], (l[0],l[1][0][1:],l[1][1]))) # Pone deportista_id como valor eje
                        .join(resultadoGanador.map(lambda l : [l[2],l[1]])) # Toma deportista_id y medalla
                        .takeSample(False,6,25))

mi output es:

[('54832',
  (('982', ['Carlos Jimnez Snchez', '1', '24', '201', '100'], 'ESP'),
   'Silver')),
 ('135219',
  (('944', ['Urka olnir', '2', '22', '173', '64'], 'SLO'), 'Bronze')),
 ('106724',
  (('705', ['Adrie Ard Schenk', '1', '19', '190', '90'], 'NED'), 'Gold')),
 ('112317',
  (('1096', ['Justus Ketchum Smith', '1', '26', '0', '0'], 'USA'), 'Gold')),
 ('124518',
  (('705', ['Daniel Daan van Dijk', '1', '21', '0', '0'], 'NED'), 'Gold')),
 ('42668',
  (('1096', ['Joseph Tilford Lee Joe Greene', '1', '25', '183', '70'], 'USA'),
   'Bronze'))]

hola

No entend铆 lo de la semilla. con takeSample()

Mi salida agregando las medallas y el Id del evento a al join ya generado,
deportistaOlimpicoRDD.map(lambda l : [l[-1], l[:-1]]).join(equiposOlimpocosRDD.map(lambda x : [x[0], x[2]])).join(resultadoGanador.map( lambda r : [r [-1], r[1]])).take(2)

Reto con equipo id, nombre, siglas y medalla

deportistaOlimpicoRDD.map(lambda l: [l[-1], l[1]]) \
    .join(equiposOlimpicosRDD.map(lambda x: [x[0], x[2]])) \
    .join(resultadoGanador.map(lambda i: [i[2], i[1]])) \
    .takeSample(False, 5, 11)

[(鈥507鈥, ((鈥楶rimo Baran鈥, 鈥業TA鈥), 鈥楪old鈥)),
(鈥15鈥, ((鈥楢hmed Sad鈥, 鈥楢LG鈥), 鈥楤ronze鈥)),
(鈥514鈥, ((鈥楾akaji Mori鈥, 鈥楯PN鈥), 鈥楽ilver鈥)),
(鈥399鈥, ((鈥楢ndreas Wellinger鈥, 鈥楪ER鈥), 鈥楽ilver鈥)),
(鈥507鈥, ((鈥楪ianfranco Grasselli鈥, 鈥業TA鈥), 鈥楤ronze鈥))]

# Uni贸n de resultadoGanador con equipos y deportistas
deportistaEquipo = deportistaOlimpicoRDD.map(lambda l : [l[-1], l[:-1]]).join(equiposOlimpicosRDD.map(lambda x : [x[0], x[2]]))
deportistaEquipo.take(5)
deportistaEquipo.map(lambda x : [x[1][0][0], x[:]]).join(resultadoGanador.map(lambda y : [y[2], y[:-1]])).take(5)

Modelo relacional

Reto:

## Union of winners with combined RDD of athetles
winners.map(
    lambda x: [x[2], x[:-1]]
).join(
    athetle_RDD.map(
        lambda y: [y[0], y[:-1]]
    )
).takeSample(False, 6, 25)

Acceder al file en Windows:

ruta = 鈥淐:\Users\USUARIO\Desktop\Proyectos Python\curso-apache-spark-platzi-master\files\鈥

equiposOlimpicosRDD = sc.textFile(ruta+鈥渄eportista.csv鈥)
.map(lambda line : line.split(","))

Listar Directorio en Windows:

!dir 鈥淐:\Users\USUARIO\Desktop\Proyectos Python\curso-apache-spark-platzi-master\files鈥

<h3>Callenge Complete</h3>
# Challenge is join 3 RDDs "equipos", "deportistas" y "resultados"

equiposYDeportistas = deportistaOlimpicoRDD.map(lambda l: [l[-1],l[:-1]]).join(equiposOlimpicosRDD.map(lambda x: [x[0], x[2]])).join(resultadoGanador.map(lambda y: [y[2], y[1]]))
equiposYDeportistas.takeSample(False,6,25)

Pienso que ese modo de nombrar variables no es muy pythonic, seg煤n pep8 deber铆a ser resultado_ganador en vez de resultadoGanador.

Es m谩s eficiente (y elegante), filtrar con comparaci贸n que con 鈥渋n鈥 si ya estamos accediendo al indice:

resultado_ganador = resultado.filter(lambda l: l[1] != 'NA')

Lo duro es entender que es una lista dentro de una tupla.
De nuevo gracias a la comunidad Platzi, sin ellos ser铆a imposible.

deportistaOlimpicosRDD.map(lambda l: [l[-1], l[:-1]]) \
    .join(equiposOlimpicosRDD.map(lambda x: [x[0], x[2]]))\
    .map(lambda r: (r[1][0][0], (r[0], r[1][0][1:], r[1][1])))\
    .join(resultadoGanador.map(lambda g: [g[2], g[1]]))\
    .takeSample(False, 6, 25)
[('54832',
  (('982', ['Carlos Jimnez Snchez', '1', '24', '201', '100'], 'ESP'),
   'Silver')),
 ('135219',
  (('944', ['Urka olnir', '2', '22', '173', '64'], 'SLO'), 'Bronze')),
 ('106724',
  (('705', ['Adrie Ard Schenk', '1', '19', '190', '90'], 'NED'), 'Gold')),
 ('112317',
  (('1096', ['Justus Ketchum Smith', '1', '26', '0', '0'], 'USA'), 'Gold')),
 ('124518',
  (('705', ['Daniel Daan van Dijk', '1', '21', '0', '0'], 'NED'), 'Gold')),
 ('42668',
  (('1096', ['Joseph Tilford Lee Joe Greene', '1', '25', '183', '70'], 'USA'),
   'Bronze'))]

Yo lo hice de la siguiente manera

deportistas_ganadores = resultado_ganador.map(lambda line: [line[2],[ line[0], line[1], line[3], line[4]]]).join(deportista_olimpicoRDD.map(lambda line: [line[0], line[1:]]))

deportistas_ganadores.map(lambda line: [line[-1][-1][-1], line]).join(equipos_olimpicos_RDD.map(lambda line: [line[0], line[1:]])).takeSample(False, 4, 20)

El resultado fue el siguiente

[('302',
  (('107564',
    (['214241', 'Bronze', '33', '122'],
     ['Martina Schrter', '2', '19', '181', '71', '302'])),
   ['East Germany', 'GDR'])),
 ('45',
  (('133933',
    (['267712', 'Silver', '41', '3'],
     ['Javier Adelmar Zanetti', '1', '22', '178', '73', '45'])),
   ['Argentina', 'ARG'])),
 ('861',
  (('3281',
    (['5827', 'Gold', '41', '216'],
     ['Simona Amnar Tabr ', '2', '16', '158', '44', '861'])),
   ['Romania', 'ROU'])),
 ('978',
  (('122356',
    (['244318', 'Bronze', '33', '146'],
     ['Liana Tsot adze', '2', '19', '158', '49', '978'])),
   ['Soviet Union', 'URS']))]

No s茅 que pa铆s sea este PER: Per煤 ;)

Hasta el momento no pude aplicar el m茅todo filter a la siguiente expresi贸n
y me quedo as铆

deportistaOlimpicoRDD.map(lambda l: [l[-1],l[:-1]])\
        .join(equiposOlimpicosRDD.map(lambda l: [l[0],l[2]]))\
        .join(resultadosRDD.map(lambda l: [l[2],l[1]]))\
        .takeSample(False,6,10)