Maison  >  Article  >  développement back-end  >  Comment implémenter la logique IF-THEN-ELSE dans Spark en utilisant « when() » ?

Comment implémenter la logique IF-THEN-ELSE dans Spark en utilisant « when() » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 07:09:02547parcourir

How to Implement IF-THEN-ELSE Logic in Spark Using `when()`?

Spark Equivalent de IF Then ELSE

Dans cet exemple, nous visons à ajouter une nouvelle colonne "Class" au DataFrame "iris_spark" basé sur les valeurs d'une colonne catégorielle existante, "iris_class", qui comporte trois catégories distinctes.

Le code fourni rencontre cependant une erreur :

iris_spark_df = iris_spark.withColumn(
    "Class", 
   F.when(iris_spark.iris_class == 'Iris-setosa', 0, F.when(iris_spark.iris_class == 'Iris-versicolor',1)).otherwise(2))

Le message d'erreur indique que la fonction when() dans Spark ne prend que deux arguments, contrairement au code fourni.

Pour résoudre ce problème, la structure correcte pour utiliser la fonction 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)))

Ces expressions sont équivalentes aux instructions SQL CASE :

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

et

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

respectivement.

Le général la syntaxe de when() dans Spark est :

when(condition, value).when(...)

ou

when(condition, value).otherwise(...)

Notez que l'expression conditionnelle Hive IF IF(condition, if-true, if-false) n'est pas prise en charge directement dans Spark et ne peut être utilisé qu'en SQL brut avec le support de Hive.

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