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
