Maison > Article > développement back-end > Comment implémenter la logique IF-THEN-ELSE dans Spark en utilisant « 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!