5 votes

Comment utiliser la condition OR dans When dans Spark

Je voulais évaluer deux conditions dans un cas comme celui-ci :-

df = df.withColumn( 'trueVal', F.when(df.value < 1 OR df.value2  == 'false' , 0 ).otherwise(df.value)) 

Pour cela, j'obtiens "syntaxe non valide" pour l'utilisation de "OR".

J'ai même essayé d'utiliser des instructions "when" imbriquées :-

df = df.withColumn( 'v', F.when(df.value < 1,(F.when( df.value =1,0).otherwise(df.value))).otherwise(df.value)) 

Pour cela, j'obtiens "keyword can't be an expression" pour les instructions "when" imbriquées.

Comment puis-je utiliser plusieurs conditions dans 'when' ?

10voto

Daniel Shields Points 397

Colonne.où prend une colonne booléenne comme condition. Lorsque l'on utilise PySpark, il est souvent utile de penser "Expression de colonne" lorsque l'on lit "Colonne".

Les opérations logiques sur les colonnes PySpark utilisent des opérateurs bizarres : '&' pour 'and', '|' pour 'or', '~' pour 'not'. Lorsque l'on combine ces opérateurs avec des opérateurs de comparaison tels que '<', des parenthèses sont souvent nécessaires.

Dans votre cas, l'affirmation correcte est la suivante :

df = df.withColumn('trueVal',
    F.when((df.value < 1) | (df.value2 == 'false'), 0).otherwise(df.value))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X