Proyecto Final

Explicacion del proyecto

Explicación del Proyecto

En este proyecto, vamos a aplicar todo lo aprendido en Apache Spark para realizar un análisis de datos de sensores. Los datos provendrán de un archivo CSV que contiene lecturas de varios sensores. Realizaremos las siguientes tareas:

  1. Lectura y Preprocesamiento de Datos:

    • Leer los datos desde un archivo CSV.
    • Realizar algunas transformaciones básicas y limpieza de datos.
  2. Análisis Descriptivo:

    • Calcular estadísticas descriptivas básicas.
    • Visualizar algunos datos clave.
  3. Aplicación de Machine Learning:

    • Utilizar MLlib para entrenar un modelo de regresión lineal que prediga una variable de interés (por ejemplo, la temperatura).
  4. Evaluación del Modelo:

    • Evaluar el rendimiento del modelo usando métricas adecuadas.
  5. Despliegue en un Clúster:

    • Configurar y ejecutar el proyecto en un entorno de clúster Standalone.

Código del Proyecto

				
					import org.apache.spark.sql.{SparkSession, DataFrame}
import org.apache.spark.sql.functions._
import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.ml.feature.{VectorAssembler, StandardScaler}
import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.ml.evaluation.RegressionEvaluator

object SensorDataAnalysis {
  def main(args: Array[String]): Unit = {
    // Crear una SparkSession
    val spark = SparkSession.builder
      .appName("Sensor Data Analysis")
      .master("local[*]")  // Cambiar a "yarn" o "spark://<master-hostname>:7077" para clúster
      .getOrCreate()

    // Leer datos desde un archivo CSV
    val data = spark.read.option("header", "true").option("inferSchema", "true").csv("path/to/sensor_data.csv")

    // Mostrar el esquema de los datos
    data.printSchema()

    // Realizar algunas transformaciones básicas
    val dataCleaned = data.na.drop()  // Eliminar filas con valores nulos

    // Calcular estadísticas descriptivas básicas
    dataCleaned.describe().show()

    // Seleccionar columnas relevantes y crear características
    val assembler = new VectorAssembler()
      .setInputCols(Array("sensor1", "sensor2", "sensor3"))
      .setOutputCol("features")
    val dataTransformed = assembler.transform(dataCleaned)

    // Dividir los datos en conjuntos de entrenamiento y prueba
    val Array(trainingData, testData) = dataTransformed.randomSplit(Array(0.8, 0.2))

    // Definir el modelo de regresión lineal
    val lr = new LinearRegression()
      .setLabelCol("target")
      .setFeaturesCol("features")

    // Crear el pipeline
    val pipeline = new Pipeline().setStages(Array(assembler, lr))

    // Ajustar el modelo con los datos de entrenamiento
    val model = pipeline.fit(trainingData)

    // Realizar predicciones en los datos de prueba
    val predictions = model.transform(testData)

    // Evaluar el modelo
    val evaluator = new RegressionEvaluator()
      .setLabelCol("target")
      .setPredictionCol("prediction")
      .setMetricName("rmse")
    val rmse = evaluator.evaluate(predictions)
    println(s"Root Mean Squared Error (RMSE) on test data = $rmse")

    // Guardar el modelo entrenado
    model.write.overwrite().save("path/to/save/model")

    // Finalizar SparkSession
    spark.stop()
  }
}

				
			

Explicación del Código

  1. Crear una SparkSession:

    • Configura y crea una sesión de Spark con un nombre de aplicación y el modo de ejecución en local (puede cambiarse para el clúster).
  2. Leer datos desde un archivo CSV:

    • Lee los datos de un archivo CSV con encabezado y esquema inferido automáticamente.
  3. Mostrar el esquema de los datos:

    • Muestra el esquema del DataFrame para verificar las columnas y sus tipos.
  4. Realizar algunas transformaciones básicas:

    • Elimina filas con valores nulos para limpiar los datos.
  5. Calcular estadísticas descriptivas básicas:

    • Calcula y muestra estadísticas descriptivas básicas como la media, el mínimo y el máximo.
  6. Seleccionar columnas relevantes y crear características:

    • Utiliza VectorAssembler para combinar múltiples columnas de características en una única columna de características (features).
  7. Dividir los datos en conjuntos de entrenamiento y prueba:

    • Divide los datos en un conjunto de entrenamiento (80%) y un conjunto de prueba (20%).
  8. Definir el modelo de regresión lineal:

    • Configura un modelo de regresión lineal para predecir la variable objetivo (target) usando las características.
  9. Crear el pipeline:

    • Define un pipeline que incluye las etapas de ensamblaje de características y el modelo de regresión lineal.
  10. Ajustar el modelo con los datos de entrenamiento:

    • Entrena el pipeline utilizando los datos de entrenamiento.
  11. Realizar predicciones en los datos de prueba:

    • Utiliza el modelo entrenado para hacer predicciones en los datos de prueba.
  12. Evaluar el modelo:

    • Evalúa el rendimiento del modelo utilizando el error cuadrático medio raíz (RMSE).
  13. Guardar el modelo entrenado:

    • Guarda el modelo entrenado para su uso futuro.
  14. Finalizar SparkSession:

    • Detiene la sesión de Spark para liberar los recursos.

Este proyecto proporciona una práctica integral de los conceptos básicos de Apache Spark, incluyendo la lectura y preprocesamiento de datos, el análisis descriptivo, la construcción y evaluación de un modelo de machine learning, y la configuración para el despliegue en un clúster.