Ausgabe
Ich habe einen sehr einfachen Code wie
val win = Window.partitionBy("app").orderBy("date")
val appSpendChange = appSpend
.withColumn("prevSpend", lag(col("Spend")).over(win))
.withColumn("spendChange", when(isnull($"Spend" - "prevSpend"), 0)
.otherwise($"spend" - "prevSpend"))
display(appSpendChange)
Dies sollte funktionieren, da ich ein PySpark-Beispiel von verweise und es in scala ändere: Pyspark Column Transformation: Calculate Percentage Change for Each Group in a Column
Allerdings bekomme ich diesen Fehler:
error: overloaded method value lag with alternatives:
(e: org.apache.spark.sql.Column,offset: Int,defaultValue: Any,ignoreNulls: Boolean)org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,offset: Int,defaultValue: Any)org.apache.spark.sql.Column <and>
(columnName: String,offset: Int,defaultValue: Any)org.apache.spark.sql.Column <and>
(columnName: String,offset: Int)org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column,offset: Int)org.apache.spark.sql.Column
cannot be applied to (org.apache.spark.sql.Column)
.withColumn("prevPctSpend", lag(col("pctCtvSpend")).over(win))
^
Wie soll ich es verstehen? Vor allem die e:
Anmerkung? Danke und freue mich über jedes Feedback.
Lösung
Sie sollten diesen Fehler wie folgt verstehen:
- Es sind 5 Methoden
lag
mit folgenden Parametern und Rückgabetyp definiert ((<parameters>)<return>
:
(e: org.apache.spark.sql.Column,offset: Int,defaultValue: Any,ignoreNulls: Boolean)org.apache.spark.sql.Column
(e: org.apache.spark.sql.Column,offset: Int,defaultValue: Any)org.apache.spark.sql.Column
(columnName: String,offset: Int,defaultValue: Any)org.apache.spark.sql.Column
(columnName: String,offset: Int)org.apache.spark.sql.Column
(e: org.apache.spark.sql.Column,offset: Int)org.apache.spark.sql.Column
- Keine dieser Möglichkeiten kann mit Parametern von Typen
(org.apache.spark.sql.Column)
(dem von Ihnen geschriebenen Code) angewendet werden.
Am Ende bedeutet dies, dass Sie eine Methode mit fehlenden oder ungültigen Parametern aufgerufen haben.
Wie @Dima sagte, möchten Sie wahrscheinlich einen zweiten Parameter ( offset
) zu Ihrem Aufruf von hinzufügen lag
.
Beantwortet von – Gaël J
Antwort geprüft von – Mildred Charles (FixError Admin)