[PYTHON] Ordre de traitement lors du chaînage dans PySpark

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é.

Données factices

df = spark.createDataFrame([(1,),(2,),(3,)], schema=('val',))
display(df)
val
1
2
3

Pour Spark SQL

#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.

Pour PySpark

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

Ordre de traitement lors du chaînage dans PySpark
Traitement itératif (récursif) avec tkinter (affiché dans l'ordre)
Traitement de fichiers en Python
Traitement multithread en python
J'obtiens une exception java.util.regex.PatternSyntaxException lors du fractionnement d'une chaîne dans PySpark
Traitement de texte avec Python
Traitement des requêtes en Python
Points à garder à l'esprit lors du traitement des chaînes en Python2
Points à garder à l'esprit lors du traitement des chaînes en Python 3
Ordre naturel en Python
Traitement de texte UTF8 avec python
Traitement asynchrone (threading) en python
Attention lorsque os.mkdir en Python
Collection de traitement d'image en Python
Traitement asynchrone du céleri dans Flask
Utilisation du mode Python dans le traitement