Spark Equivalent de IF Then ELSE
Cette question explore la création d'une nouvelle colonne dans un Spark DataFrame basée sur des règles conditionnelles.
Problème avec la fonction When
Le code fourni tente d'utiliser la fonction when() pour créer une nouvelle colonne nommée "Class" en fonction des valeurs de la colonne "iris_class". Cependant, il génère une erreur indiquant que when() ne prend que deux arguments.
Syntaxe et structure correctes
La syntaxe correcte pour la fonction when() est :
F.when(condition1, value1).when(condition2, value2)...otherwise(otherwiseValue)
Cela permet d'enchaîner plusieurs clauses when(), avec une clause facultative else() pour gérer les cas non couverts par les clauses when().
Le SQL équivalent pour cette syntaxe serait une instruction CASE avec plusieurs clauses WHEN, comme indiqué ci-dessous :
CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 ... ELSE otherwiseValue END
Solution recommandée
Par conséquent, le code correct pour créer la "Classe" La colonne doit être :
iris_spark_df = iris_spark.withColumn( "Class", F.when(iris_spark.iris_class == 'Iris-setosa', 0) .when(iris_spark.iris_class == 'Iris-versicolor', 1) .otherwise(2) )
Syntaxe alternative
Une autre syntaxe valide pour obtenir le même résultat est :
iris_spark_df = iris_spark.withColumn( "Class", F.when(iris_spark.iris_class == 'Iris-setosa', 0) .otherwise( F.when(iris_spark.iris_class == 'Iris-versicolor', 1) .otherwise(2) ) )
Remarque sur Hive IF
Il est important de noter que le conditionnel Hive IF, qui a la syntaxe IF(condition, if-true, if-false), n'est pas pris en charge dans Spark. Ce conditionnel ne peut être utilisé que dans les requêtes SQL brutes avec prise en charge 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!