У меня есть два очень больших набора данных (таблицы) в HDFS. Я хочу объединить их в некоторых столбцах, затем сгруппировать их в некоторых столбцах, а затем выполнить некоторые групповые функции в некоторые столбцы.
Мои шаги:
1- Создайте два задания.
2- В первом задании в картографе считываются строки каждого набора данных в качестве входного значения карты и выдаются значения столбцов соединения в качестве выходного ключа карты и значения остальных столбцов в качестве карты. выходное значение.
После сопоставления платформа MapReduce выполняет перетасовку и группирует все выходные значения карты в соответствии с выходными ключами карты.
Затем в редукторе он считывает каждый выходной ключ карты и его значения, которые включают в себя множество строк из обоих наборов данных.
Что я хочу, так это многократно повторять уменьшение входного значения, чтобы я мог выполнить декартово произведение.
Проиллюстрировать:
Допустим, для ключа соединения x у меня есть 100 совпадений из одного набора данных и 200 совпадений из другого. Это означает, что объединение их по ключу соединения x дает комбинацию 100 * 200 = 20000. Я хочу испустить NullWritable как уменьшить выходной ключ и каждое декартово произведение как уменьшить выходное значение.
Пример вывода может быть:
для ключа соединения x:
Из (nullWritable), (первый (1), второй (1))
Более (nullWritable), (первый (1), второй (200))
Кому (nullWritable), (первый (100), второй (200))
Как это сделать?
Я могу повторить только один раз. И я не мог обналичить значения, потому что они не помещаются в память.
3- Если я это сделаю, я запущу второе задание, которое использует файл результатов первого задания в качестве входного файла. В картографе я выдаю значения групповых столбцов в качестве выходного ключа карты, а значения остальных столбцов - в качестве выходного значения карты. Затем в редукторе, перебирая значение каждого ключа, я выполняю некоторые функции для некоторых столбцов, таких как сумма, среднее, максимальное, минимальное.
Заранее большое спасибо.