#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 количество строк должно быть в кортеже.