Como filtrar dados no PySpark: um guia para iniciantes

Entenda como usar as funções filter e where para manipular DataFrames no PySpark

No mundo da análise de dados, dominar o PySpark é uma habilidade crucial, especialmente quando se trata de filtragem de dados em DataFrames. Neste guia para iniciantes, vamos explorar como utilizar as funções filter e where, permitindo que você manipule e analise grandes volumes de dados de forma eficiente.

Você aprenderá as melhores práticas e exemplos práticos, desde a simples filtragem por condição de igualdade até técnicas para excluir múltiplos valores indesejados e filtrar strings vazias. Prepare-se para aprimorar suas habilidades em uma das ferramentas mais poderosas do ecossistema de Big Data e Machine Learning!

O que é PySpark?

PySpark é uma API do Apache Spark projetada para a linguagem de programação Python. Essa ferramenta foi desenvolvida para facilitar a colaboração entre o Apache Spark, que é implementado em Scala, e o Python. Com o PySpark, é possível interagir com Resilient Distributed Datasets (RDDs) através da biblioteca Py4J, que permite a comunicação entre Python e objetos da JVM (Java Virtual Machine).

O PySpark é amplamente utilizado como um mecanismo de processamento analítico para aplicações que lidam com grandes volumes de dados, possibilitando também o aprendizado de máquina. Ele proporciona escalabilidade ao distribuir tarefas através de múltiplos nós em um cluster, permitindo o processamento em paralelo de conjuntos massivos de dados. Essa característica faz do PySpark uma das principais bibliotecas para o processamento de Big Data e Machine Learning.

Além de ser uma ferramenta poderosa, o PySpark conta com várias bibliotecas que permitem a escrita de programas de forma eficiente, como:

  • PySparkSQL: Ideal para realizar análises semelhantes a SQL em grandes volumes de dados estruturados ou semi-estruturados, integrando-se ao Apache Hive.

  • MLlib: A biblioteca de machine learning do Spark, projetada para facilitar o uso de algoritmos de aprendizado de máquina.

  • GraphFrames: Uma biblioteca para o processamento gráfico que oferece APIs para realizar análises de grafos de maneira eficaz.

Entre as diversas vantagens do PySpark, estão a facilidade de aprendizado devido à popularidade do Python, uma API simples e abrangente, além de proporcionar melhor legibilidade e manutenção do código, tornando-o acessível e amigável para iniciantes.

O PySpark é uma ferramenta incrível para filtragem de dados em DataFrames: vale a pena aprender a utilizá-lo

Como funciona a função filter no PySpark?

A função filter no PySpark é utilizada para criar um novo DataFrame filtrando os elementos de um DataFrame existente com base em uma condição. Ela é semelhante à função filter do Python, mas opera em conjuntos de dados distribuídos, sendo analógica à cláusula WHERE do SQL.

A função filter permite aplicar critérios de filtragem nas linhas do DataFrame. Tanto filter quanto where funcionam de maneira idêntica, gerando um novo DataFrame que contém apenas as linhas que satisfazem a condição especificada.

Sintaxe

A sintaxe básica da função filter é a seguinte:

filter(condition)

Aqui, condition é a condição de filtragem ou expressão especificada com expressões SQL, funções da API do DataFrame ou funções definidas pelo usuário (UDFs). A condição é avaliada como verdadeira (True) para as linhas que devem ser mantidas e falsa (False) para as que devem ser descartadas.

Exemplos práticos

  1. Filtrando por condição de igualdade:

  2. Filtrando por condição diferente:

  3. Filtrando com múltiplas condições:

  4. Filtrando usando a função isin:

A função filter é uma ferramenta poderosa para selecionar subconjuntos de dados em DataFrames no PySpark, permitindo manipulações e análises eficazes.

Alternativas à função filter no PySpark

As alternativas à função filter incluem:

  1. Método where(): É um alias para a função filter e pode ser usado da mesma forma para substituir ou filtrar DataFrames.

  2. Sintaxe SQL: Você pode usar uma interface semelhante ao SQL, utilizando expressões SQL como strings dentro do método filter ou where.

    Exemplo:

  3. Expressões SQL: PySpark oferece um conjunto rico de expressões SQL que podem ser aplicadas diretamente nas colunas do DataFrame.

    Exemplo:

  4. Funções Lambda: Para lógica de filtragem mais complexa, você pode usar funções lambda dentro do método filter.

    Exemplo:

  5. Operador isin(): O método isin() permite filtrar linhas do DataFrame com base em se os valores em uma coluna correspondem a qualquer valor em uma lista especificada.

    Exemplo:

Essas abordagens oferecem flexibilidade e atendem a diversas necessidades de processamento de dados no PySpark.

Como filtrar linhas que não estão em uma lista

Para filtrar linhas que não estão em uma lista no PySpark, você pode utilizar o método filter() ou where() junto com a função isin().

Exemplo prático

Imagine que você tem um DataFrame e deseja filtrar os registros com base em uma lista de valores não desejados:

# Define um DataFrame
rdd = sc.parallelize([(0, 1), (0, 1), (0, 2), (1, 2), (1, 10), (1, 20), (3, 18)])
df = sqlContext.createDataFrame(rdd, ["id", "score"])

# Define uma lista de scores
l = [10, 18, 20]

# Filtra registros que não estão na lista l
records = df.filter(~df.score.isin(l))

# O esperado seria: (0,1), (0,1), (0,2), (1,2)

Neste código, a expressão ~df.score.isin(l) é utilizada para retornar todas as linhas onde a coluna score não está contida na lista l. O operador ~ é crucial, pois ele nega a condição, permitindo a seleção de registros que não correspondem aos valores da lista.

Como filtrar valores distintos em um DataFrame

Para filtrar valores distintos em um DataFrame no PySpark, você pode usar a função filter() juntamente com o operador de não igualdade (!=) ou a função isin().

Exemplo de filtragem simples

Se deseja manter apenas os valores que atendem a uma condição específica, você pode combinar condições usando operadores lógicos como & (AND) ou | (OR):

df.filter(df.state != "OH").show()

Para filtrar múltiplos valores usando a função isin(), defina uma lista de estados e use ~ para selecionar os estados que não estão nessa lista:

li = ["OH", "CA", "DE"]
df.filter(~df.state.isin(li)).show()

Como filtrar strings vazias em PySpark

Para filtrar strings vazias em PySpark, você pode usar o método filter() em uma coluna do seu DataFrame. A comparação é feita com uma string vazia (''):

df.filter(df.coluna == '').show()

Se você quiser filtrar linhas onde a coluna contém strings vazias ou valores NULL, pode usar o método isNull junto com a verificação de strings vazias, utilizando o operador OR (|):

from pyspark.sql.functions import col

df.filter((col("coluna") == '') | (col("coluna").isNull())).show()

Essa consulta retornará todas as linhas onde a coluna especificada é uma string vazia ou NULL.

Conclusão

Neste guia, você aprendeu como filtrar dados utilizando as funções filter e where no PySpark, além de explorar alternativas que tornam a manipulação de DataFrames ainda mais versátil. Agora, com essas ferramentas em seu arsenal, você poderá aplicar critérios de filtragem de forma mais eficiente e adaptar suas análises de acordo com as necessidades específicas de seus projetos.

Ao dominar essas técnicas de filtragem, você não só aumenta sua capacidade de trabalhar com grandes volumes de dados, mas também enriquece sua compreensão sobre como o PySpark pode ser uma aliada poderosa na análise de dados em ambientes de Big Data.