En aquest tema, aprendrem a realitzar operacions bàsiques i avançades amb DataFrames en Apache Spark. Els DataFrames són una abstracció de dades distribuïdes que permeten treballar amb dades estructurades de manera eficient. A més, proporcionen una API de més alt nivell que els RDDs, facilitant la manipulació i l'anàlisi de dades.
Continguts
Creació de DataFrames
Des d'un fitxer CSV
from pyspark.sql import SparkSession # Crear una sessió de Spark spark = SparkSession.builder.appName("DataFrameOperations").getOrCreate() # Carregar un fitxer CSV en un DataFrame df = spark.read.csv("path/to/file.csv", header=True, inferSchema=True) df.show()
Des d'un RDD
# Crear un RDD rdd = spark.sparkContext.parallelize([ (1, "Alice", 29), (2, "Bob", 31), (3, "Cathy", 25) ]) # Definir l'esquema from pyspark.sql.types import StructType, StructField, IntegerType, StringType schema = StructType([ StructField("id", IntegerType(), True), StructField("name", StringType(), True), StructField("age", IntegerType(), True) ]) # Convertir l'RDD en un DataFrame df = spark.createDataFrame(rdd, schema) df.show()
Selecció de Columnes
Seleccionar una o més columnes
# Seleccionar una columna df.select("name").show() # Seleccionar múltiples columnes df.select("name", "age").show()
Afegir una nova columna
# Afegir una nova columna amb una operació aritmètica df = df.withColumn("age_plus_one", df["age"] + 1) df.show()
Filtratge de Files
Filtrar files amb una condició
Filtrar files amb múltiples condicions
# Filtrar files on l'edat és major de 25 i el nom és "Alice" df.filter((df["age"] > 25) & (df["name"] == "Alice")).show()
Agregacions
Funcions d'agregació bàsiques
# Calcular l'edat mitjana df.agg({"age": "avg"}).show() # Calcular l'edat màxima df.agg({"age": "max"}).show()
Agrupar i agregar
Unions i Joins
Unir dos DataFrames
# Crear un segon DataFrame df2 = spark.createDataFrame([ (1, "USA"), (2, "UK"), (3, "Canada") ], ["id", "country"]) # Unir els DataFrames per la columna "id" df.join(df2, "id").show()
Operacions de Grup
Agrupar per una columna i aplicar funcions d'agregació
# Agrupar per la columna "country" i calcular l'edat mitjana df.join(df2, "id").groupBy("country").agg({"age": "avg"}).show()
Exercicis Pràctics
Exercici 1: Creació i Selecció
- Crea un DataFrame a partir d'un fitxer CSV.
- Selecciona les columnes "name" i "age".
Solució
# Crear un DataFrame a partir d'un fitxer CSV df = spark.read.csv("path/to/file.csv", header=True, inferSchema=True) # Seleccionar les columnes "name" i "age" df.select("name", "age").show()
Exercici 2: Filtratge i Agregació
- Filtra les files on l'edat és major de 25.
- Calcula l'edat màxima de les files filtrades.
Solució
# Filtrar les files on l'edat és major de 25 filtered_df = df.filter(df["age"] > 25) # Calcular l'edat màxima de les files filtrades filtered_df.agg({"age": "max"}).show()
Exercici 3: Unions i Agrupacions
- Crea un segon DataFrame amb les columnes "id" i "country".
- Uneix els dos DataFrames per la columna "id".
- Agrupa per la columna "country" i calcula l'edat mitjana.
Solució
# Crear un segon DataFrame df2 = spark.createDataFrame([ (1, "USA"), (2, "UK"), (3, "Canada") ], ["id", "country"]) # Unir els DataFrames per la columna "id" joined_df = df.join(df2, "id") # Agrupar per la columna "country" i calcular l'edat mitjana joined_df.groupBy("country").agg({"age": "avg"}).show()
Conclusió
En aquesta secció, hem après a crear DataFrames, seleccionar columnes, filtrar files, realitzar agregacions, unir DataFrames i aplicar operacions de grup. Aquestes operacions són fonamentals per treballar amb dades estructurades en Apache Spark i proporcionen una base sòlida per a tasques més avançades de processament de dades. En el següent mòdul, explorarem com treballar amb Datasets en Spark.
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