Maison >développement back-end >Tutoriel Python >Comment implémenter la logique IF-THEN-ELSE dans Spark DataFrames ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 04:18:03384parcourir

How to Implement IF-THEN-ELSE Logic in Spark DataFrames?

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!

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