2013-05-07 4 views
0

Я новичок в Hadoop и я работаю с программой, ввод функции отображения представляет собой файл, ключи, как это:Key перенумерации на карте уменьшить

ID:  value: 
3   sd 
37   g 
5675  gk 
68   oi 

Моего файл около 10 гигабайтов и я хотите изменить эти идентификаторы и перенумеровать их в порядке убывания. Я не хочу менять значения. Мой выход должен быть таким:

ID:  value: 
5675   sd 
68   g 
37   gk 
3   oi 

Я хочу сделать эту работу в кластере узлов? Как я могу это сделать?

Я думаю, что мне нужна глобальная переменная, и я не могу сделать это в кластере? Что я могу сделать?

+0

Это процесс, который вы будете делать несколько раз? или это одноразовая сделка? – greedybuddha

+0

@ greedybuddha: Я должен сделать это один раз. – user1878364

ответ

1

Вы можете сделать одну карту/уменьшить, чтобы заказать идентификаторы, тогда у вас будет файл с идентификаторами в порядке убывания.

Затем вы можете написать вторую карту/сокращение, которая присоединилась бы к этому файлу с несортированным файлом, в котором картограф будет выдавать перечислитель (который может быть рассчитан по размеру разметки для облегчения отображения нескольких карт), чтобы обработчик, fist будет выдавать «1 sd» «2 g» и т. д., а обработчик, обрабатывающий файл ids, будет выдавать «1 5675» «2 68». Редуктор будет присоединиться файлами

вот (непроверенный) pig 0.11 скрипт, который будет делать что-то вдоль этих линий:

A = load 'data' AS (id:chararray,value:chararray); 
ID_RAW= FOREACH A GENERATE id; 
DATA_RAW = FOREACH A GENERATE value; 
ID_SORT= RANK ID_RAW BY id DESC DENSE; 
DATA_SORT = RANK DATA_RAW DENSE; 
ID_DATA = JOIN ID_SORT by $0, DATA_SORT by $0; 
RESULT = FOREACH ID_DATA GENERATE ID_SORT::ID,DATA_SORT::value; 
STORE RESULT to 'output'; 
0

Прежде чем говорить об этом, я хотел ответить Арнон в использование для Hadoop.

Но, поскольку это небольшой файл, 10G не такой уж большой, и вам нужно всего лишь запустить его один раз, я бы просто написал небольшой скрипт.

Предполагая разделителями табуляцией файл

sort myfile.txt > myfile.sorted.text 
paste myfile.sorted.text myfile.text | cut -f1,4 > newFile.txt 

Это может занять много времени, конечно, больше, чем при использовании Hadoop, но просто и работает