Пропуск заголовка при загрузке текстового файла с помощью Piglatin
У меня есть текстовый файл, и первая строка содержит заголовок. Теперь я хочу выполнить некоторую операцию над данными, но при загрузке файла с помощью PigStorage он также принимает HEADER. Я просто хочу пропустить HEADER. Можно ли это сделать (напрямую или через UDF)?
Это команда, которую я использую для загрузки данных:
input_file = load '/home/hadoop/smdb_tracedata.csv'
USING PigStorage(',')
as (trans:chararray, carrier:chararray,aainday:chararray);
Ответы
Ответ 1
Если у вас есть версия свиньи 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 точно так же, как и оригинал, без строки заголовка (предполагая, что строка заголовка является первой строкой в файле). Обратите внимание, что оператор ранга доступен только для свиней 0.11, поэтому, если у вас есть более ранняя версия, вам нужно будет найти другой способ.
Изменить: добавлена упорядоченная строка, чтобы убедиться, что файл New_input_file поддерживает тот же порядок, что и исходный входной файл
Ответ 2
Обычно я решаю эту проблему - использовать FILTER на том, что я знаю, в заголовке. Например, рассмотрим следующий пример данных:
STATE,NAME
MD,Bob
VA,Larry
Я сделаю:
B = FILTER A BY state != 'STATE';
Ответ 3
Вот еще один способ сделать это:
-
Загрузите полный файл, включая запись заголовка, в отношение
fileAllRecords = LOAD 'csvfilename' using PigStorage(',');
-
Используйте команду хвоста Linux для потока только записей данных
fileDataRecords = STREAM fileAllRecords THROUGH `tail -n +2` AS (chararray:f1 ..)
-
Чтобы проверить, что запись заголовка удалена, используйте следующую команду:
firstFewRecords = STREAM fileDataRecords THROUGH `head -20`;
DUMP firstFewRecords;
Ответ 4
Вы хотите использовать CSVExcelStorage, найденный в копилке. Он позволяет устанавливать параметры для обработки заголовков, окончаний строк, котируемых полей и других параметров CSV. Конструктор, который вы хотите, доступен только в версиях PIG atleast 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);
Ответ 5
Такие ошибки обычно возникают, когда вы пытаетесь преобразовать несовместимые типы данных. Я столкнулся с подобной проблемой и причиной → Файл, который я пытаюсь загрузить, содержит заголовок и показывает ошибку. Другими вероятными причинами может быть присутствие NA, Spaces в столбце