Пропуск заголовка при загрузке текстового файла с помощью Piglatin
У меня есть текстовый файл, и это первая строка содержит заголовок. Теперь я хочу сделать некоторую операцию над данными, но при загрузке файла с помощью PigStorage он также берет заголовок. Я просто хочу пропустить заголовок. Возможно ли это сделать(напрямую или через UDF)?
это команда, которую я использую для загрузки данных:
input_file = load '/home/hadoop/smdb_tracedata.csv'
USING PigStorage(',')
as (trans:chararray, carrier:chararray,aainday:chararray);
5 ответов
Если у вас есть свинья версии 0.11, вы могли бы попробовать это:
input_file = load '/home/hadoop/smdb_tracedata.csv' USING PigStorage(',') as (trans:chararray, carrier :chararray,aainday:chararray);
ranked = rank input_file;
NoHeader = Filter ranked by (rank_input_file > 1);
Ordered = Order NoHeader by rank_input_file
New_input_file = foreach Ordered Generate trans, carrier, aainday;
Это избавит от первой строки, оставив New_input_file точно таким же, как и исходный, без строки заголовка (предполагая, что строка заголовка является первой строкой в файле). Обратите внимание, что оператор ранга доступен только в pig 0.11, поэтому, если у вас есть более ранняя версия, вам нужно будет найти другой способ.
Edit: добавлена упорядоченная строка, чтобы убедиться, что New_input_file поддерживает тот же порядок в качестве исходного входного файла
обычно способ решения этой проблемы заключается в использовании фильтра для чего-то, что я знаю, находится в заголовке. Например, рассмотрим следующий пример:
STATE,NAME
MD,Bob
VA,Larry
Я сделаю так:
B = FILTER A BY state != 'STATE';
вот еще один способ сделать это:
-
загрузите полный файл, включая запись заголовка в отношении
fileAllRecords = LOAD 'csvfilename' using PigStorage(',');
-
используйте команду Linux tail для потоковой передачи только записей данных
fileDataRecords = STREAM fileAllRecords THROUGH `tail -n +2` AS (chararray:f1 ..)
-
чтобы убедиться, что запись заголовка удалена, используйте следующую команду -
firstFewRecords = STREAM fileDataRecords THROUGH `head -20`; DUMP firstFewRecords;
вы хотите использовать CSVExcelStorage найдено в piggybank. Он позволяет устанавливать параметры для обработки заголовков, окончаний строк, цитируемых полей и других параметров CSV. Конструктор, который вы хотите, доступен только в версиях PIG по крайней мере 0.12 и имеет подпись:
CSVExcelStorage(String delimiter, String multilineTreatmentStr, String eolTreatmentStr, String headerTreatmentStr)
свин код ниже :
REGISTER /usr/lib/pig/piggybank.jar;
input_file = load '/home/hadoop/smdb_tracedata.csv'
USING CSVExcelStorage(',', 'default', 'NOCHANGE', 'SKIP_INPUT_HEADER')
as (trans:chararray, carrier:chararray,aainday:chararray);
такого рода ошибки обычно возникают при попытке преобразовать несовместимые типы данных. Я столкнулся с аналогичной проблемой и причиной --> файл, который я пытаюсь загрузить, содержит заголовок и отображает ошибку. Другие вероятные причины могут быть наличием NA, пробелов в столбце