O Apache Spark™ 3.5 e o Databricks Runtime 14.0 trouxeram um recurso empolgante: funções de tabela definidas pelo usuário (UDTFs) em Python. Nesta postagem no blog, vamos explorar o que são UDTFs, por que são tão poderosas e como você pode usá-las.
Uma função de tabela do Python definida pelo usuário (UDTF) é um novo tipo de função que retorna uma tabela como saída, em vez de um único valor escalar como resultado. Depois de registradas, elas podem aparecer na cláusula FROM de uma SQL query.
Cada UDTF do Python aceita zero ou mais argumentos, em que cada argumento pode ser um valor escalar constante, como um número inteiro ou uma strings. O corpo da função pode inspecionar os valores desses argumentos para tomar decisões sobre quais dados retornar.
Resumindo, se você quer uma função que gere várias linhas e colunas e quer aproveitar o rico ecossistema do Python, as UDTFs do Python são para você.
Embora as UDFs do Python no Spark sejam projetadas para aceitar zero ou mais valores escalares como entrada e retornar um único valor como saída, as UDTFs oferecem mais flexibilidade. Elas podem retornar várias linhas e colunas, ampliando os recursos das UDFs.
As UDTFs em SQL são eficientes e versáteis, mas o Python oferece um conjunto mais rico de bibliotecas e ferramentas. Para transformações ou cálculos que precisam de técnicas avançadas (como funções estatísticas ou inferências de machine learning), o Python se destaca.
Vejamos uma UDTF básica do Python:
No código acima, criamos uma UDTF simples que recebe dois números inteiros como entrada e produz duas colunas como saída: o número original e seu quadrado.
O primeiro o passo para implementar uma UDTF é definir uma classe, neste caso
A seguir, você precisa implementar o método eval da UDTF. Este é o método que faz os cálculos e retorna linhas, onde você define os argumentos de entrada da função.
Observe o uso da instrução yield; uma UDTF do Python exige que o tipo de retorno seja uma tupla ou um objeto Row para que os resultados possam ser processados corretamente.
Por fim, para marcar a classe como uma UDTF, você pode usar o decorador @udtf e definir o tipo de retorno da UDTF. Observe que o tipo de retorno deve ser um StructType com formatação de bloco ou uma string DDL que represente um StructType com formatação de bloco no Spark.
Você pode invocar uma UDTF diretamente usando o nome da classe.
Primeiro, registro a UDTF do Python:
Em seguida, você pode usá-la em SQL como uma função com valor de tabela na cláusula FROM de uma query:
O Apache Arrow é um formato de dados colunares na memória que permite transferências de dados eficientes entre processos Java e Python. Ele pode aumentar significativamente o desempenho quando a UDTF gera muitas linhas. A otimização do Arrow pode ser ativada usando useArrow=True.
O exemplo acima pode parecer básico. Vamos nos aprofundar com um exemplo divertido, integrando UDTFs em Python com o LangChain.
Agora, você pode invocar a UDTF:
Se você deseja realizar transformações de dados complexas, enriquecer seus datasets ou simplesmente explorar novas maneiras de analisar seus dados, as UDTFs do Python são uma adição valiosa ao seu kit de ferramentas. Experimente este Notebook e consulte a documentação para mais informação.
Esta funcionalidade é apenas o começo da plataforma de UDTF do Python. Muitos outros recursos estão atualmente em desenvolvimento no Apache Spark para serem disponibilizados em versões futuras. Por exemplo, será possível oferecer suporte a:
(This blog post has been translated using AI-powered tools) Original Post
Data Engineering
March 18, 2025/7 min de leitura

