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

Patricia Arquette
Libérer: 2024-11-19 12:06:02
original
803 Les gens l'ont consulté

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)
Copier après la connexion

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))
Copier après la connexion

ou :

(when(col("iris_class") == 'Iris-setosa', 0)
    .otherwise(when(col("iris_class") == 'Iris-versicolor', 1)
        .otherwise(2)))
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal