Apuntes del curso en Notion
Importando Spark
Creando la Session
Una vez creada la session podemos realizar todas las operaciones que spark permite como por ejemplo crear RDD, Dataframe, importar data externa, etc.
Terminar la session o context para que no siga en memoria consumiendo recursos del Cluster con .stop()
Creando Context
SparkContext Permite crear un session para comenzar a utilizar spark
Podemos pasar Context a Session de la siguiente manera
RDD
Transformaciones y acciones
Collect
Podemos verificar la data del RDD con la siguiente acción
Podemos cargar csv en rdd. Recordar que si tenemos algún error solo sera posible ver cuando se ejecute un action
Take
.take() para ver los registros del rdd
Exploramos un Rdd con .map() que recibe una función lambda por ejemplo y aplica dicha función a cada elemento en el rdd y devuelve un nuevo rdd, vamos a ver un ejemplo en la siguiente celda con un conteo de los distintos elemento de la columna 'sigla'. [ x[2] ] -> Procesando como una lista. ( x[2] ) ->Procesando como una tupla
GroupBy
Vamos a utilizar .groupBy() para agrupar la data y .map() para seleccionar primero la columna key por la que necesitamos la agrupación y segundo la columna que vamos a realizar el count. .mapValues(len or list or xfunction) -> retorna la data en base a lo que recibe como parámetro
Filter
Podemos realizar filtros de data en rdd con .filter()
Count
Si crees que tienes un rdd inmenso puedes realizar un .countApprox(20) y enviarle como param el tiempo en milisegundo para que solo cuente hasta ese momento
Union
Vamos a realizar uniones de Rdd con el .union()
Join
Podemos utilizar .join() para realizar cruces en rdd. .top() -> Nos permite observar las dos primeras registros del dataset
Vamos a ordenar las columnas del rdd de tal manera que quede al inicio el campo por el cual se va a hacer join
Uniremos mediante join las dos celdas anteriores y utilizamos .takeSample() para elegir una muestra aleatorias del rdd y se le envía como parámetros True o False para repetidos, la cantidad de registros que quiero ver y por ultimo un numero aleatorio o semilla que va a mostrar los mismos registros siempre
Creamos un nuevo rdd para los ganadores de medallas olimpicas
Vamos a realizar una agrupación y conteo del campo medalla para ver los distintos valores que tiene
Como vemos que son pocos registros tranquilamente podemos usar un .collect() para agrupar
Filtramos la data no queremos los NA
Reto: Haremos un join del deportistas_equipos_rdd que contiene los equipos y los deportista que pertenecen a cada uno de ellos con los ganadores_rdd que tienen solo los que ganaron medallas
Necesitamos solo el campo deportista_id y las siglas del pais al que pertenecen para esto utilizamos slices
Hacemos el join el primer dato es el campo 'deportista_id' de ambos rdd
Cuando hacemos join se crean sub tuplas y para hacer slices para acceder a esos valores es de la siguiente manera
add
Vamos a crear un diccionarios con el puntaje que le asignan a cada pais por medalla
Utilizamos el map del rdd donde tenemos el pais y la medalla ganada y Aplicamos el diccionario donde tenemos mapeados los puntajes de las medallas
Por ultimo aplicamos una sumatoria por paises y ordenamos para obtener el top 5 de los mas ganadores
Dataframe
Load
Vamos a crear el esquema para el dataframe
Otra manera de cargar dataframe en las siguientes celdas
Operaciones con df
En la siguiente celdas podemos ver como renombrar y eliminar columnas del df
Filter
Filtrando y ordenando en df
Select
Select en df y para utilizar col().alias() debemos importar la siguiente librería
Joins
Teniendo definidos los esquemas podemos empezar a realizar joins
Reto: Hacer Joins de las medallas y los equipos que las ganaron, no mostrar los equipos que no ganaron medallas
Tenemos que realizar un join de los deportistas con los equipos o selecciones a la que pertenecen y por ultimo otro join con el df de solo ganadores
GroupBy
Sql
Convertimos los df en tablas temporales dentro de spark pero el verdadero poder de spark se ve en usar las funciones nativas de los df
Udf
UDF (User Defined Functions) son las funciones de usuario, y son sistemas para definir nuevos métodos SQL que operan sobre las columnas de un DataFrame
Creamos una función normal
Registramos la udf en spark con las siguientes líneas
Persistencia
Vamos a validar si un df esta almacenado en cache
Para mantener el df en cache podemos ejecutar la siguiente propiedad
Para saber cual es el tipo de persistencia que tiene ejecutamos la siguiente sentencia y podemos validar en el link que significa su salida
Vamos a bajar de la persistencia en cache el df y aplicar una persistencia en disco y cache memoria
Vamos agregar un numero mas de replicación al df