2016-07-20 11 views
1

Ich habe folgendes df:Spark Hive - UDFArgumentTypeException mit Fensterfunktion?

+------------+----------------------+-------------------+         
|increment_id|base_subtotal_incl_tax|   eventdate|         
+------------+----------------------+-------------------+         
|  1086|   14470.0000|2016-06-14 09:54:12|         
|  1086|   14470.0000|2016-06-14 09:54:12|         
|  1086|   14470.0000|2015-07-14 09:54:12|         
|  1086|   14470.0000|2015-07-14 09:54:12|         
|  1086|   14470.0000|2015-07-14 09:54:12|         
|  1086|   14470.0000|2015-07-14 09:54:12|         
|  1086|    1570.0000|2015-07-14 09:54:12|         
|  5555|   14470.0000|2014-07-14 09:54:12|         
|  5555|   14470.0000|2014-07-14 09:54:12|         
|  5555|   14470.0000|2014-07-14 09:54:12|         
|  5555|   14470.0000|2014-07-14 09:54:12|         
+------------+----------------------+-------------------+ 

Ich versuche, eine Fensterfunktion ausgeführt wird:

WindowSpec window = Window.partitionBy(df.col("id")).orderBy(df.col("eventdate").desc()); 
df.select(df.col("*"),rank().over(window).alias("rank")) //error for this line 
     .filter("rank <= 2") 
     .show(); 

Was ich zum letzten Termin die letzten beiden Einträge (zuletzt als für bekommen möchten , aber da es bestellt wird von absteigend, die ersten beiden Zeilen) für jeden Benutzer:

+------------+----------------------+-------------------+         
|increment_id|base_subtotal_incl_tax|   eventdate|         
+------------+----------------------+-------------------+         
|  1086|   14470.0000|2016-06-14 09:54:12|         
|  1086|   14470.0000|2016-06-14 09:54:12| 
|  5555|   14470.0000|2014-07-14 09:54:12|         
|  5555|   14470.0000|2014-07-14 09:54:12|          
+------------+----------------------+-------------------+ 

aber ich habe dies:

Was fehlt mir?

[ALT] - ursprünglich, ich hatte einen Fehler, wird dies nun gelöst:

WindowSpec window = Window.partitionBy(df.col("id")); 
df.select(df.col("*"),rank().over(window).alias("rank")) //error for this line 
     .filter("rank <= 2") 
     .show(); 

Dies ist jedoch ein Fehler zurückgegeben Exception in thread "main" org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException: One or more arguments are expected. für die Linie oben mit einem Kommentar markiert. Was vermisse ich? Was bedeutet dieser Fehler? Vielen Dank!

Antwort

0

rank Fensterfunktion erfordert ein Fenster mit orderBy, Klausel zum Beispiel:

WindowSpec window = Window.partitionBy(df.col("id")).orderBy(df.col("payment")); 

Ohne einen Auftrag es einfach sinnlos ist, daher die Fehler.

+0

Vielen Dank! Ich werde deine Antwort akzeptieren, aber meine Frage aktualisiert. Wenn Sie mir dabei helfen können, wäre ich sehr dankbar. –

Verwandte Themen