[FIXED] Wie kann man „e:“ und „columnsName“ in der Spark-Fehlermeldung verstehen, wenn die Fensterfunktion verwendet wird?

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 lagmit 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] Funkenfassade für CaseWhen

Ausgabe Ich versuche, eine Funktion zu erstellen, die wie eine Fassade für die CaseWhenSpark-Funktion wirkt. CaseWhen( branches: Seq[(Expression,…