Пропуск заголовка при загрузке текстового файла с помощью 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 в столбце