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

Susan Sarandon
Libérer: 2024-11-18 07:09:02
original
546 Les gens l'ont consulté

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

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))
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

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

et

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

respectivement.

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

when(condition, value).when(...)
Copier après la connexion

ou

when(condition, value).otherwise(...)
Copier après la connexion

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!

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