Spark Äquivalent von IF Then ELSE

Ich habe diese Frage hier früher gesehen und daraus Lehren gezogen. Ich bin mir jedoch nicht sicher, warum ich einen Fehler erhalte, wenn ich der Meinung bin, dass er funktionieren sollte.

Ich möchte eine neue Spalte in vorhandenem Spark erstellenDataFrame nach einigen Regeln. Hier ist was ich geschrieben habe. iris_spark ist der Datenrahmen mit einer kategorialen Variablen iris_spark mit drei unterschiedlichen Kategorien.

from pyspark.sql import functions as F

iris_spark_df = iris_spark.withColumn(
    "Class", 
   F.when(iris_spark.iris_class == 'Iris-setosa', 0, F.when(iris_spark.iris_class == 'Iris-versicolor',1)).otherwise(2))

Führt den folgenden Fehler aus.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-157-21818c7dc060> in <module>()
----> 1 iris_spark_df=iris_spark.withColumn("Class",F.when(iris_spark.iris_class=='Iris-setosa',0,F.when(iris_spark.iris_class=='Iris-versicolor',1)))

TypeError: when() takes exactly 2 arguments (3 given)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-157-21818c7dc060> in <module>()
----> 1 iris_spark_df=iris_spark.withColumn("Class",F.when(iris_spark.iris_class=='Iris-setosa',0,F.when(iris_spark.iris_class=='Iris-versicolor',1)))

TypeError: when() takes exactly 2 arguments (3 given)

Eine Idee warum?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage