You are on page 1of 5

Problema usando Apache Spark

Por Prof. Oscar H. Mondragón


1. Objetivos

• Afianzar los conocimientos adquiridos acerca de Pyspark y sus diferentes librerías

2. Herramientas a utilizar

• Vagrant
• VirtualBox
• Apache Spark

3. Introducción

En esta práctica, se utilizará Apache Spark con Pyspark para analizar datos de ventas de
una tienda. Se utilizará un archivo de texto que contiene información sobre los productos
vendidos en la tienda, incluyendo el nombre del producto, el precio y la cantidad vendida.

Utilizaremos conceptos como aplicaciones, RDDs, acumuladores, broadcast, Spark SQL,


Spark Streaming y Spark MLib para realizar diversas consultas y análisis sobre los datos.

En particular, se nos pide que realicemos los siguientes análisis:


1. Calcular el total de ventas por producto.
2. Calcular el total de ventas para toda la tienda.
3. Encontrar el producto más vendido.

Para resolver este problema, utilizaremos Pyspark para cargar el archivo de texto como
un RDD, y luego utilizaremos diversas funciones de Spark para procesar y analizar los
datos. En particular, utilizaremos la función reduceByKey para calcular el total de ventas
por producto, la función reduce para calcular el total de ventas para toda la tienda, y la
función sortBy para encontrar el producto más vendido.

Además, exploraremos otras herramientas de Spark como Spark SQL, Spark Streaming y
Spark MLib que nos permitirán realizar análisis más avanzados y trabajar con datos en
tiempo real.

4. Desarrollo de la práctica
4.1. Configuración de Vagrant

Esta práctica la desarrollaremos usando boxes de Ubuntu 22.04 en Vagrant. El


Vagrantfile que usaremos es el siguiente (el mismo con el que venimos
trabajando):

# -*- mode: ruby -*-


# vi: set ft=ruby :

Vagrant.configure("2") do |config|

if Vagrant.has_plugin? "vagrant-vbguest"
config.vbguest.no_install = true
config.vbguest.auto_update = false
config.vbguest.no_remote = true
end

config.vm.define :clienteUbuntu do |clienteUbuntu|


clienteUbuntu.vm.box = "bento/ubuntu-22.04"
clienteUbuntu.vm.network :private_network, ip: "192.168.100.2"
clienteUbuntu.vm.hostname = "clienteUbuntu"
end

config.vm.define :servidorUbuntu do |servidorUbuntu|


servidorUbuntu.vm.box = "bento/ubuntu-22.04"
servidorUbuntu.vm.network :private_network, ip: "192.168.100.3"
servidorUbuntu.vm.hostname = "servidorUbuntu"
end
end

4.2. Preparación de la Práctica

En prácticas anteriores, configuramos un cluster Spark de un solo nodo. Lo primero que


haremos es Iniciar el master:

vagrant@servidorUbuntu:~$ cd labSpark/spark-3.3.1-bin-hadoop3/sbin/
vagrant@servidorUbuntu:~/labSpark/spark-3.3.1-bin-hadoop3/sbin$ ./start-
master.sh
starting org.apache.spark.deploy.master.Master, logging to
/home/vagrant/labSpark/spark-3.3.1-bin-hadoop3/logs/spark-vagrant-
org.apache.spark.deploy.master.Master-1-servidorUbuntu.out

Seguidamente, lanzaremos un worker:

vagrant@servidorUbuntu:~/labSpark/spark-3.3.1-bin-hadoop3/sbin$ ./start-
worker.sh spark://192.168.100.3:7077
starting org.apache.spark.deploy.worker.Worker, logging to
/home/vagrant/labSpark/spark-3.3.1-bin-hadoop3/logs/spark-vagrant-
org.apache.spark.deploy.worker.Worker-1-servidorUbuntu.out

Puede verificar que el master y el worker están corriendo correctamente abriendo


http://192.168.100.3:8080/ en el browser.

5. Problema

Supongamos que tenemos un archivo de texto que contiene información sobre los
productos vendidos en una tienda. Cada línea del archivo tiene el siguiente formato:

producto,precio,cantidad

Por ejemplo:

Leche,2.5,10
Pan,1.5,20
Huevos,3,5
Queremos analizar la información contenida en el archivo para obtener los siguientes
resultados:
1. Calcular el total de ventas por producto.
2. Calcular el total de ventas para toda la tienda.
3. Encontrar el producto más vendido.

Para resolver este problema utilizando Apache Spark con Pyspark, se sugiere seguir los
siguientes pasos:

1. Crear una aplicación de Spark y cargar el archivo de texto como un RDD.


2. Utilizar la función map para convertir cada línea del RDD en una tupla con tres
elementos: el nombre del producto, el precio y la cantidad.
3. Utilizar la función reduceByKey para calcular el total de ventas por producto.
4. Utilizar la función reduce para calcular el total de ventas para toda la tienda.
5. Utilizar la función sortBy para encontrar el producto más vendido.

Para convertir el RDD en un DataFrame y utilizar SQL para realizar las consultas,
podríamos utilizar Spark SQL.

6. Ejercicio

1. Implemente el problema planteado en la sección 5

7. Bonificación

1. Implemente alguna de las siguientes opciones:

a. Asuma que el archivo de texto se actualiza continuamente, y utilice Spark


Streaming para procesar los nuevos datos en tiempo real.

b. Utilice Spark MLib para aplicar técnicas de machine learning y análisis


estadístico a los datos.

8. Entregables y Evaluación

- Sustentación de la práctica
9. Bibliografía

• Tutorial PySpark Interactivo. https://andfanilo.github.io/pyspark-interactive-


lecture/#/

You might also like