Hadoop mapreduce CSV в качестве ключа: слово - PullRequest
0 голосов
/ 28 октября 2018

Я не смог найти ответ на свой вопрос, если есть похожий пост, пожалуйста, отправьте меня туда.

У меня есть файл CSV, на котором я пытаюсь выполнить mapreduce, форматCSV состоит из двух столбцов: Название книги |Сводка.Я хочу, чтобы можно было выполнить mapreduce для каждой книги и подсчитать количество слов в каждой книге, поэтому я хотел бы, чтобы вывод был следующим: Название книги: Token.

До сих пор я пыталсяиспользовать следующий код для достижения этой цели:

    String firstBook = null;
    while (itr.hasMoreTokens()) {
        String secondBook = itr.nextToken();
        if (firstBook != null) {
              word.set(firstBook + ":" + secondBook);
              context.write(word, one);
        }
        firstBook = secondBook;
      } 

Иногда выдается следующее;word: title

Кроме того, это ограничивает анализ, который я могу сделать, поскольку именно эту логику я хотел бы использовать для анализа биграмм в каждом синопсисе.

Есть ли способ, которымЯ могу выделить название каждой книги, просто выполнив mapreduce в столбце «синопсис» CSV?Если да, то как мне это сделать и получить желаемый результат?

Заранее большое спасибо.

ОБНОВЛЕНИЕ

Код изменен с Hadoops wordcount пример, единственное изменение в разделе "карта" и показано выше.Вы можете найти входные данные здесь .

Представление файла CSV:

Book title, Synopsis
A short history of nearly everything, Bill Byrson describes himself as a reluctant traveller...
Reclaiming economic development, There is no alternative to neoliberal economics - or so it appeared...

-> Примечание. Я сократил краткий обзор.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это было решено с помощью класса «KeyValueTextInputFormat», здесь есть несколько учебных пособий, которые конкретно относятся к этому классу.Это позволило мне отделить CSV-файл, в результате чего получилась пара ключ: значение (в моем случае название книги: синопсис).Затем вы можете выполнить уменьшение как обычно для «значения» и передать его на стадию уменьшения как «ключ: токен».

0 голосов
/ 29 октября 2018

таким образом, я хотел бы, чтобы вывод был следующим: Название книги: Токен.

Если вы скопировали пример подсчета слов, вы пишете только каждые два токена, за которыми следует число1. Не похоже, что вы берете названия, только токены синопсиса.Но вы отрезали часть, где вы получаете токенизатор, так что трудно сказать.

Примечание. Если заголовок книги содержит запятые, в результате вы получите часть заголовка как часть краткого изложения с вашим текущим подходом.Если возможно, вы должны сделать колонку заголовка заключенной в кавычки или, что лучше, не использовать запятые (или любой другой общий разделитель) между столбцами, если этот разделитель будет частью хотя бы первого столбца.

выполните анализ биграмм в каждом синопсисе.

Если вы хотите провести такой анализ, я бы рекомендовал сначала очистить столбцы - удалить заглавные буквы изнаки препинания.Стеблирование слов также может дать лучший результат.

Есть ли способ изолировать название каждой книги

Конечно, поместите оператор if для первого столбца, нацеленного на конкретную книгу, и пишите только в контекств этом состоянии

В противном случае, если ваш картограф будет записывать название книги только как ключ, тогда они будут изолированы как часть функции сокращения

...