HiveQL и rank ()

Я могу'не понимаю HiveQL rank (). Я'мы нашли пару реализаций ранга UDF 'на WWW, такие какЭдвард»хороший пример, Я могу загрузить и получить доступ к функциям, но я могузаставить их делать то, что я хочу. Вот подробный пример:

Загрузка UDF в процесс CLI:

$ javac -classpath /home/hadoop/hadoop/hadoop-core-1.0.4.jar:/home/hadoop/hive/lib/hive-exec-0.10.0.jar com/m6d/hiveudf/Rank2.java 
$ jar -cvf Rank2.jar com/m6d/hiveudf/Rank2.class
hive> ADD JAR /home/hadoop/MyDemo/Rank2.jar;
hive> CREATE TEMPORARY FUNCTION Rank2 AS 'com.m6d.hiveudf.Rank2'; 

Создать таблицу:

create table purchases (
  SalesRepId String, 
  PurchaseOrderId INT, 
  Amount INT
) 
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n';

Загрузить данные из этого CSV:

Jana,1,100
Nadia,2,200
Nadia,3,600
Daniel,4,80
Jana,5,120
William,6,170
Daniel,7,140

С этим из CLI:

LOAD DATA 
  LOCAL INPATH '/home/hadoop/MyDemo/purchases.csv'
  INTO TABLE purchases;

Теперь я вижу своих лучших торговых представителей:

select SalesRepId,sum(amount) as volume
from purchases
group by SalesRepId
ORDER BY volume DESC;

Надя продала вещи по 800 долларов, Даниэль и Яна продали по 220 долларов, а Уильям - 170 долларов.

SalesRep    Amount
--------    ------
Nadia       800
Daniel      220
Jana        220
William     170

Теперь все, что я хочу сделать, это пронумеровать их: Надя № 1, Даниэль и Яна - № 2, а Уильям № 4 (не № 3)

select SalesRepId, V.volume,rank2(V.volume)
from 
(select SalesRepId,sum(amount) as volume
from purchases
group by SalesRepId
ORDER BY volume DESC) V;

Это то, что я получаю, но НЕ то, что я хочу:

SalesRep   Amount  Rank
--------   ------  ----
Nadia       800      1
Daniel      220      1
Jana        220      2
William     170      1

Это то, что я ХОЧУ, но я могусделай это для меня:

SalesRep   Amount  Rank
--------   ------  ----
Nadia       800      1
Daniel      220      2
Jana        220      2
William     170      4

Можете ли вы помочь мне с правильным HiveQL для ранжирования моих торговых представителей?

Спасибо JtheRocker за его ответ. Его изменение привело к этому списку:

SalesRep   Amount  Rank
--------   ------  ----
William     170     1
Daniel      220     2
Jana        220     2
Nadia       800     3

Небольшая модификация, показывающая Надю как 4-ю (не 3-ю):

private row_number;
@Override
public Object evaluate(DeferredObject[] currentKey) throws HiveException {
  row_number++;
  if (!sameAsPreviousKey(currentKey)) {
    this.counter = row_number;
    copyToPreviousKey(currentKey);
  }
return new Long(this.counter);
}

Ответы на вопрос(2)

Ваш ответ на вопрос