Desafio: Sua Primeira Tarefa de Limpeza de Dados
Deslize para mostrar o menu
Um pipeline de dados normalmente segue um padrão: Carregar, Limpar, Transformar e Salvar. Neste mini-projeto, aplicamos essas etapas a um conjunto de dados específico para passar de dados brutos a um resumo limpo e agregado, pronto para relatórios de negócios.
Para concluir a Seção 4, vamos colocar em prática tudo o que você aprendeu. Embora seja possível aplicar essas etapas a qualquer conjunto de dados de sua escolha, demonstraremos a solução utilizando o popular conjunto de dados Diamonds. Esse conjunto contém os preços e atributos (corte, cor, clareza, etc.) de quase 54.000 diamantes.
Você pode acompanhar o vídeo e realizar a tarefa por conta própria utilizando o mesmo conjunto de dados (amplamente disponível no Kaggle como diamonds.csv) ou pode selecionar qualquer conjunto de dados de sua preferência e aplicar o mesmo princípio, definindo um objetivo semelhante.
Por favor, se possível, pause o vídeo/leitura do texto após ler o objetivo. Tente realizar o projeto por conta própria, independentemente do seu nível de familiaridade com o Databricks. Mesmo uma tentativa simples será muito mais proveitosa do que apenas ler a solução. Caso não tenha tempo, continue lendo a solução e tente realizar este exercício em outro momento.
O Objetivo
Identificar o preço médio e os quilates médios para diamantes com corte "Premium", agrupados por cor, e salvar apenas os resultados de alto valor (onde o preço médio é superior a $4.000) em uma nova tabela.
Etapa 1: Carregar e Inspecionar
Primeiro, carregar os dados e verificar o schema para garantir que os campos de preço e quilates sejam reconhecidos como valores numéricos.
# Assuming the diamonds CSV was uploaded to a Volume
df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my_volume/diamonds.csv")
df.printSchema()
Etapa 2: Filtrar e Selecionar
Nem todas as colunas são necessárias, e o foco está apenas nos diamantes "Premium" para esta tarefa específica:
# Filter for Premium cut and select relevant columns
premium_df = df.filter(df.cut == "Premium").select("color", "price", "carat")
Etapa 3: Agregação e Agrupamento
Agora é possível calcular as médias. Utilize a biblioteca pyspark.sql.functions para garantir precisão nos cálculos.
from pyspark.sql import functions as F
# Group by color and calculate averages
summary_df = premium_df.groupBy("color").agg(
F.avg("price").alias("avg_price"),
F.avg("carat").alias("avg_carat")
)
.alias() apenas renomeia uma coluna no resultado da consulta — como um apelido temporário. Não altera a tabela real, apenas como a coluna aparece na saída.
Pense nisso como AS em SQL — SELECT price AS price_in_usd.
Útil quando os nomes das colunas são longos, pouco claros ou quando se cria uma coluna calculada e é necessário atribuir um nome legível.
Etapa 4: Filtro Final e Ordenação
Manter apenas as categorias de alto valor onde o preço médio excede 4.000. Os resultados serão ordenados para que o maior preço médio fique no topo.
final_df = summary_df.filter(F.col("avg_price") > 4000).orderBy("avg_price", ascending=False)
display(final_df)
Talvez você ainda não tenha encontrado a função F.col().
F.col() é a forma de referenciar uma coluna pelo nome no PySpark. O F é apenas o alias para pyspark.sql.functions — importado no início do notebook assim:
from pyspark.sql import functions as F
df.select(F.col("price"))
Em muitos casos, é equivalente a digitar apenas o nome da coluna como uma string, mas F.col() é preferido porque permite encadear operações diretamente:
F.col("price") * 1.1
F.col("cut").alias("diamond_cut")
Considere F.col("price") como "me dê a coluna price como um objeto com o qual posso realmente trabalhar."
Etapa 5: Salvar o Resultado
Por fim, registre este relatório limpo de "High-Value Premium Diamonds" em nosso Catálogo para que a equipe de análise possa utilizá-lo.
final_df.write.mode("overwrite").saveAsTable("main.default.high_value_premium_diamonds")
1. Na Etapa 3, por que você utilizou o método .alias() dentro da agregação?
2. Se você quiser aplicar este projeto ao seu próprio conjunto de dados, qual parte do código deve ser alterada primeiro?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo