En aquest tema, aprendrem com gestionar dades faltants en Apache Spark. La gestió de dades faltants és una part crucial del processament de dades, ja que les dades incompletes poden afectar la qualitat de les anàlisis i els resultats dels models d'aprenentatge automàtic.
Objectius
- Comprendre què són les dades faltants i per què és important gestionar-les.
- Aprendre diferents tècniques per identificar i gestionar dades faltants en DataFrames de Spark.
- Aplicar aquestes tècniques en exemples pràctics.
Què són les Dades Faltants?
Les dades faltants es refereixen a valors que no estan presents en un conjunt de dades. Això pot ocórrer per diverses raons, com errors en la recopilació de dades, problemes tècnics o simplement perquè la informació no estava disponible en el moment de la recopilació.
Importància de Gestionar les Dades Faltants
- Qualitat de les Dades: Les dades incompletes poden portar a conclusions errònies.
- Modelatge: Molts algoritmes d'aprenentatge automàtic no poden manejar dades faltants i requereixen que es tractin abans de l'entrenament.
- Anàlisi: Les anàlisis estadístiques poden ser esbiaixades si no es gestionen adequadament les dades faltants.
Identificació de Dades Faltants
Exemple Pràctic
from pyspark.sql import SparkSession from pyspark.sql.functions import col, isnan, when, count # Crear una sessió de Spark spark = SparkSession.builder.appName("HandlingMissingData").getOrCreate() # Crear un DataFrame d'exemple data = [(1, "Alice", 50), (2, "Bob", None), (3, None, 30), (4, "David", 45), (5, "Eve", None)] columns = ["id", "name", "age"] df = spark.createDataFrame(data, columns) # Mostrar el DataFrame original df.show() # Identificar les dades faltants df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show()
Explicació del Codi
- Crear una Sessió de Spark: Iniciem una sessió de Spark.
- Crear un DataFrame d'Exemple: Definim un DataFrame amb algunes dades faltants.
- Mostrar el DataFrame Original: Utilitzem
show()
per veure el contingut del DataFrame. - Identificar les Dades Faltants: Utilitzem
isnan
iisNull
per comptar els valors faltants en cada columna.
Tècniques per Gestionar Dades Faltants
- Eliminar Files o Columnes
Exemple Pràctic
# Eliminar files amb qualsevol valor faltant df_cleaned = df.na.drop() df_cleaned.show() # Eliminar columnes amb qualsevol valor faltant df_cleaned_cols = df.dropna(how='any', subset=['name', 'age']) df_cleaned_cols.show()
Explicació del Codi
- Eliminar Files amb Valors Faltants: Utilitzem
na.drop()
per eliminar files que continguin qualsevol valor faltant. - Eliminar Columnes amb Valors Faltants: Utilitzem
dropna()
amb el paràmetresubset
per eliminar columnes específiques amb valors faltants.
- Imputació de Valors
Exemple Pràctic
from pyspark.ml.feature import Imputer # Imputar valors faltants amb la mitjana imputer = Imputer(inputCols=["age"], outputCols=["imputed_age"]).setStrategy("mean") df_imputed = imputer.fit(df).transform(df) df_imputed.show()
Explicació del Codi
- Imputació de Valors: Utilitzem
Imputer
depyspark.ml.feature
per substituir els valors faltants amb la mitjana de la columna.
- Substituir amb un Valor Específic
Exemple Pràctic
# Substituir valors faltants amb un valor específic df_filled = df.na.fill({"age": 0, "name": "Unknown"}) df_filled.show()
Explicació del Codi
- Substituir amb un Valor Específic: Utilitzem
na.fill()
per substituir els valors faltants amb un valor específic per a cada columna.
Exercicis Pràctics
Exercici 1
Descripció: Carrega un DataFrame amb dades faltants i elimina totes les files que continguin valors faltants.
Codi
# Carregar un DataFrame amb dades faltants data = [(1, "Alice", 50), (2, "Bob", None), (3, None, 30), (4, "David", 45), (5, "Eve", None)] columns = ["id", "name", "age"] df = spark.createDataFrame(data, columns) # Eliminar files amb valors faltants df_cleaned = df.na.drop() df_cleaned.show()
Exercici 2
Descripció: Imputa els valors faltants en la columna age
amb la mitjana de la columna.
Codi
from pyspark.ml.feature import Imputer # Imputar valors faltants amb la mitjana imputer = Imputer(inputCols=["age"], outputCols=["imputed_age"]).setStrategy("mean") df_imputed = imputer.fit(df).transform(df) df_imputed.show()
Resum
En aquesta secció, hem après què són les dades faltants i per què és important gestionar-les. Hem explorat diverses tècniques per identificar i gestionar dades faltants en DataFrames de Spark, incloent l'eliminació de files o columnes, la imputació de valors i la substitució amb valors específics. A més, hem aplicat aquestes tècniques en exemples pràctics i hem proporcionat exercicis per reforçar els conceptes apresos.
En el següent mòdul, explorarem la programació avançada amb Spark, incloent Spark Streaming i Spark MLlib.
Curs d'Apache Spark
Mòdul 1: Introducció a Apache Spark
Mòdul 2: Conceptes Bàsics de Spark
Mòdul 3: Processament de Dades amb Spark
Mòdul 4: Programació Avançada amb Spark
Mòdul 5: Optimització i Millora del Rendiment
- Comprendre les Tasques de Spark
- Emmagatzematge en Memòria i Persistència
- Gestió de Memòria
- Optimització d'Aplicacions Spark
Mòdul 6: Spark al Núvol
Mòdul 7: Aplicacions del Món Real i Estudis de Cas
- Processament de Dades en Temps Real
- Anàlisi de Big Data
- Pipelines d'Aprenentatge Automàtic
- Estudis de Cas