Лид и отставание в Hbase - PullRequest
       4

Лид и отставание в Hbase

0 голосов
/ 09 декабря 2011

Я пытаюсь выяснить, как сделать эквивалент Oracle LEAD и LAG в Hbase или какой-то другой шаблон, который решит мою проблему.Я мог бы написать программу MapReduce, которая делает это довольно легко, но я бы хотел использовать тот факт, что данные уже отсортированы так, как мне нужно.

Моя проблема заключается в следующем: У меня есть ключ строки и значение, которое выглядит следующим образом:

(employee name + timestamp) => data:salary

Итак, некоторые примеры данных могут быть:

miller, bob;2010-01-14 => data:salary=90000
miller, bob;2010-11-04 => data:salary=102000
miller, bob;2011-12-03 => data:salary=107000
monty, fred;2010-04-10 => data:salary=19000
monty, fred;2011-09-09 => data:salary=24000

Что я хочу сделать, это рассчитать изменения зарплатызапись за записью.Я хочу преобразовать приведенные выше данные в различия между записями:

miller, bob;2010-01-14 => data:salarydiff=90000
miller, bob;2010-11-04 => data:salarydiff=12000
miller, bob;2011-12-03 => data:salarydiff=5000
monty, fred;2010-04-10 => data:salarydiff=19000
monty, fred;2011-09-09 => data:salarydiff=5000

Я готов изменить стратегию использования клавиш в случае необходимости.

1 Ответ

1 голос
/ 09 декабря 2011

Что бы я сделал, это изменил ключ так, чтобы временная метка была убывающей (сначала новая зарплата)

miller, bob;2011-12-03 => data:salary=107000
miller, bob;2010-11-04 => data:salary=102000
miller, bob;2010-01-14 => data:salary=90000

Теперь вы можете выполнить простое задание карты, которое будет сканировать таблицу.Затем на карте вы создаете новое сканирование для текущего ключа.Scan.next, чтобы получить предыдущую зарплату, рассчитать разницу и сохранить ее в новом столбце на текущем ключе строки
В основном в вашем классе сопоставления (тот, который наследует TableMapper) вы переопределяете метод настройки и получаете конфигурацию

@Override
protected void setup(Mapper.Context context) throws IOException,InterruptedException {
    Configuration config = context.getConfiguration();
    table = new HTable(config,<Table Name>);
}

Затем внутри карты вы извлекаете ключ строки из параметра строки, создаете новое сканирование и продолжаете, как описано выше

В большинстве случаев следующая запись будет в том же регионе - иногдаон может перейти на другой регион

...