использование PIG для загрузки файла

#hadoop #apache-pig

#hadoop #apache-pig

Вопрос:

Я очень новичок в PIG, и мне кажется, что у меня возникла очень простая проблема. У меня есть строка кода, которая гласит:

 A = load 'Sites/trial_clustering/shortdocs/*'
      AS (word1:chararray, word2:chararray, word3:chararray, word4:chararray);
  

где каждый файл в основном представляет собой строку из 4 слов, разделенных запятыми. Однако PIG не разбивает это на 4 слова. Когда я делаю сброс A , я получаю: (Money, coins, loans, debt,,,)
Я попробовал погуглить, но, похоже, не могу найти, в каком формате должен быть мой файл, чтобы PIG правильно его интерпретировал. Пожалуйста, помогите!

Ответ №1:

Ваша проблема в том, что Pig по умолчанию загружает файлы, разделенные символом табуляции, а не запятой. Происходит то, что "Money, coins, loans, debt" вы застреваете в вашем первом столбце, word1 . При печати создается иллюзия, что у вас несколько столбцов, но на самом деле первый заполнен всей вашей строкой, тогда как остальные равны нулю.

Чтобы исправить это, вы должны указать PigStorage для загрузки через запятую, выполнив:

 A = LOAD '...' USING PigStorage(',') AS (...);
  

Комментарии:

1. Спасибо! Это сработало! Теперь у меня возник новый вопрос: как мне поступить с файлом, разделенным символом новой строки? Я пытался

2. Спасибо, это сработало. Теперь у меня новый вопрос; Кажется, я не могу заставить это работать с файлом, разделенным новыми строками, A = LOAD ‘…’ ИСПОЛЬЗУЯ PigStorage(‘ n’) КАК (…); не работает! и также A = LOAD ‘…’ не ЗАГРУЖАЕТСЯ С ИСПОЛЬЗОВАНИЕМ PigStorage(‘\n’) КАК (…); Спасибо!

3. PigStorage будет обрабатывать каждую новую строку как еще один кортеж. Невозможно указать, что X количество строк должно быть в кортеже.