Мне нужно форматировать данные в плоском файле до его загрузки в таблицу Hive.Табличная схема внутри PIG UDF
CF32|4711|00010101Z| +34.883| 98562AS1D |N8594ãä| 00 | 2
Файл трубы разделены, и мне нужно применять различные чистящие и функции форматирования на разных колонках в плоском файле. У меня есть несколько функций для Clean_Text, Format_Date, Format_TimeStamp, Format_Integer и т. Д.
Моя идея - передать схему как конструктор в мой UDF и вызвать различные функции на плоском файле в свинье.
A = LOAD 'call_detail_records' USING org.apache.hcatalog.pig.HCatLoader();
DESCRIBE A;
REGISTER ZPigUdfs.jar;
DEFINE DFormat com.zna.pig.udf.DataColumnFormatter(A);
B = FOREACH A GENERATE DFormat($0);
DUMP B;
Но как я могу пройти схему? DUMP A фактически выгружает всю таблицу, но мне нужны только метаданные. Мой текущий UDF псевдо-код выглядит
общественного класса DataColumnFormatter расширяет EvalFunc {
private Tuple schema;
public DataColumnFormatter(Tuple schema) {
this.schema = schema;
}
@Override
public String exec(Tuple inputTuple) throws IOException {
if (inputTuple != null && inputTuple.size() > 0) {
String inpString = inputTuple.get(0).toString();
System.out.println(inpString);
System.out.println(schema);
/**
* Logic for splitting the string as pipe and apply functions based
* on positions of schema if(schema[1] -> date){
*
* formatDate(input) }else if(schema[1] -> INT){
*
* formatInt(input); }
*
*/
}
return null;
}
}
Как я могу получить схему в PIG UDF или есть альтернативный способ для достижения этой цели.
Заранее спасибо.
(1) Откуда должна произойти эта схема? (2) Что удерживает вас от определения схемы как константы? (3) Возможно ли, что разные строки внутри одной таблицы будут иметь другую схему? –
Схема должна быть из HCкаталога. У меня есть несколько файлов, и я не хочу определять схему каждый раз, когда запускаю скрипты. Нет всех записей в таблице, имеющих одну и ту же схему. – Abhi