Maison >développement back-end >Tutoriel Python >Comment implémenter la logique « IF THEN ELSE » dans Spark DataFrames ?

Comment implémenter la logique « IF THEN ELSE » dans Spark DataFrames ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 12:06:02890parcourir

How to Implement

Équivalent Spark de "IF Then ELSE"

Introduction :

Offre de transformations Spark DataFrame un moyen puissant de manipuler les données. Une opération courante consiste à appliquer conditionnellement des transformations basées sur des valeurs variables. Comprendre l'équivalent Spark de l'instruction "IF Then ELSE" dans SQL est crucial pour de telles tâches.

Question :

Un utilisateur tente d'ajouter une nouvelle colonne à un Spark DataFrame basé sur des règles conditionnelles. Cependant, ils rencontrent une TypeError lorsqu'ils tentent d'utiliser la fonction F.when avec plusieurs conditions.

TypeError: when() takes exactly 2 arguments (3 given)

Réponse :

L'erreur se produit car le F.when La fonction dans Spark attend exactement deux arguments : une condition et une valeur à renvoyer lorsque la condition est remplie. Le code de l'utilisateur inclut un argument supplémentaire, une autre condition F.when, qui est une syntaxe incorrecte.

La syntaxe correcte pour l'équivalent "IF Then ELSE" dans Spark utilisant F.when est soit :

(when(col("iris_class") == 'Iris-setosa', 0)
.when(col("iris_class") == 'Iris-versicolor', 1)
.otherwise(2))

ou :

(when(col("iris_class") == 'Iris-setosa', 0)
    .otherwise(when(col("iris_class") == 'Iris-versicolor', 1)
        .otherwise(2)))

La première syntaxe utilise des conditions F.when imbriquées, tandis que la seconde utilise la fonction F.otherwise.

Une instruction SQL équivalente serait une expression CASE :

CASE WHEN (iris_class = 'Iris-setosa') THEN 0 
     ELSE CASE WHEN (iris_class = 'Iris-versicolor') THEN 1 
               ELSE 2 
          END 
END

Spark prend également en charge la syntaxe conditionnelle Hive IF, mais uniquement en SQL brut avec prise en charge de Hive :

IF(condition, if-true, if-false)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn