2016-07-20 3 views
1

나는 다음과 같은 DF 있습니다Spark Hive - 윈도우 함수가있는 UDFArgumentTypeException입니까?

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(); 

내가 싶어하는 것은 마지막 두 항목이다 마지막으로 최신 날짜로 (:

+------------+----------------------+-------------------+         
|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|         
+------------+----------------------+-------------------+ 

내가 같은 윈도우 함수를 실행하기 위해 노력하고있어 그것은 각 사용자에 대해, 처음 두 행) 내림차순으로 정렬 된 이후,하지만 :

+------------+----------------------+-------------------+         
|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|          
+------------+----------------------+-------------------+ 

하지만 난이 얻을 :

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

무엇이 누락 되었습니까?

[OLD가] - 원래, 나는 오류가 발생했습니다, 이것은 지금 해결 :

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

그러나 이것은 코멘트와 위에 표시된 라인에 대한 오류 Exception in thread "main" org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException: One or more arguments are expected.를 반환합니다. 내가 뭘 놓치고 있니? 이 오류는 무엇을 의미합니까? 고맙습니다! 이 때문에, 에러 단순히 의미가 순서없이

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

:

답변

0

rank 윈도우 기능은 예를 들어 orderBy와 창, 절을 필요로한다.

+0

고마워요! 나는 당신의 대답을 받아 들일 것이지만, 나의 질문을 업데이트했다. 이 일을 도울 수 있으면 너무 감사 할 것입니다. –