Quand j'écrivais du code pour enchaîner when
dans PySpark
"Est-ce que ceci a priorité sur le" quand "précédemment écrit, tout comme SQL?" "Parce qu'il s'agit d'une chaîne de méthodes, sera-t-elle écrasée par le" quand "écrit après?"
J'étais inquiet, alors j'ai en fait écrit le code de vérification et l'ai examiné.
df = spark.createDataFrame([(1,),(2,),(3,)], schema=('val',))
display(df)
val |
---|
1 |
2 |
3 |
#Inscrivez-vous en tant que table temporaire à toucher depuis Spark SQL
df.registerTempTable('tmp')
SELECT
val,
CASE
WHEN val <= 1 THEN 'label_1'
WHEN val <= 2 THEN 'label_2'
ELSE 'label_3'
END AS label
FROM tmp
val | label |
---|---|
1 | label_1 |
2 | label_2 |
3 | label_3 |
Dans le cas de SQL, bien sûr, la condition de «WHEN» écrite plus tôt est prioritaire.
from pyspark.sql import functions as F
df_label = df.withColumn('label',
F.when(F.col('val') <= 1, 'label_1')
.when(F.col('val') <= 2, 'label_2')
.otherwise('label_3')
)
display(df_label)
val | label |
---|---|
1 | label_1 |
2 | label_2 |
3 | label_3 |
Même lorsque «when» est enchaîné dans PySpark, il semble que la condition de «when» écrite plus tôt soit prioritaire comme dans Spark SQL.
Recommended Posts