Tenho um dataframe com muitas colunas e em uma das colunas tenho a operação lógica que preciso realizar no dataframe. Como exemplo, veja o dataframe abaixo
Preciso realizar a operação lógica definida na coluna operação lógica nas linhas relevantes
Em um cenário normal, consigo usar expr(). Mas, neste caso, quando quero lê-lo de uma coluna e depois aplicar, ocorre um erro dizendo que a coluna não é iterável.
Alguma sugestão?
Aqui está uma solução usando scala UDF no pyspark, pois eles são mais rápidos que os UDFs python. Você pode encontrar o código para o UDF e o jar de lançamento usado no script pyspark no repositório a seguir.
Se você quiser fazer modificações na função UDF para atender às suas necessidades futuras, tudo o que você precisa fazer é executar
sbt assembly
para compilar o jar.Em seguida, chame a
com.help.stackoverflow.CheckUDFs
classe do jar para verificar a implementação correta.https://github.com/dineshdharme/pyspark-native-udfs
Código fonte da
EvaluateBooleanExpression
classe:Script python Pyspark:
Saída :
Você pode usar a função eval padrão do Python dentro de uma UDF .
A função espera que os dados estejam em um dict, então primeiro
eval
transformamos as colunas de dados em uma estrutura :Saída:
eval
vem com algumas questões de segurança , então verifique se isso pode ser um problema para você!