2012-04-04 3 views
1

Я новичок в Pig, и я пытаюсь написать программу подсчета слов.WordCount с пользовательскими разделителями слов в Pig?

Одним из способов получения слова из текста использовать TOKENIZE функции:

WORDS = foreach INPUT generate flatten(TOKENIZE(text)) AS word; 

Но я только хочу разделить на пробельном, в то время как TOKENIZE расщепляется на таких вещах, как запятые, тоже. Как мне это сделать? Я попытался использовать STRSPLIT(text, ' '), но STRSPLIT, кажется, возвращает кортеж, тогда как TOKENIZE возвращает сумку, поэтому я не уверен, как использовать STRSPLIT для этого.

ответ

1

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

  1. Загрузите ваши данные
  2. Использование STRSPLIT разделить свою ценность в кортеж
  3. Преобразование кортежи в сумку с UDF
  4. Свести вам мешок
2

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

  1. Используйте MyRegExLoader (в PiggyBank) обновляйте текст для регулярного выражения.
  2. Используйте STREAM с Perl, sed или вашим любимым языком сценариев, чтобы преобразовать ваши входные данные в формат, который TOKENIZE будет обрабатывать так, как вы хотите.

Также можно конвертировать кортежи в сумку с ToBag (также в PiggyBank).

Смежные вопросы