У меня есть набор входных файлов для обработки с помощью Pig со следующей структурой именования:
/user/hdp/input/custom/Fold1/train0.txt
/user/hdp/input/custom/Fold1/train1.txt
/user/hdp/input/custom/Fold1/train2.txt
/user/hdp/input/custom/Fold1/train3.txt
...
/user/hdp/input/custom/Fold1/train9.txt
/user/hdp/input/custom/Fold1/train10.txt
/user/hdp/input/custom/Fold1/train11.txt
/user/hdp/input/custom/Fold1/train12.txt
...
вплоть до учебного файла 99. Я строю сценарий Pig динамически как Java String, который затем отправляю в свой кластер. Я ищу общее решение для загрузки диапазона файлов поезда от 0 до некоторого числа x, где я могу установить этот x в любой java int до 99.
В предыдущей версии моего решения поддерживаемые значения x до 9, я использовал поддержку Pig для globs следующим образом:
pigString += "TRAIN = LOAD 'user/hdp/input/custom/Fold1/train[0-"+x+"].txt' USING PigStorage(' ');";
Этот подход не масштабируется до значений, больших 9, так как с 10 он начинает принимать два символа вместо одного. Одним из возможных решений было бы разделение x на одну цифру и использование этого для построения свиней String.
int tens = x/10;
int single = x%10;
if(tens>0)
pigString += "TRAIN = LOAD 'user/hdp/input/custom/Fold1/train[0-"+tens+"][0-+"single"+.txt' USING PigStorage(' ');";
else
pigString += "TRAIN = LOAD 'user/hdp/input/custom/Fold1/train[0-"+single+"].txt' USING PigStorage(' ');";
Однако эти решения имеют две проблемы.
Кто-нибудь знает какое-либо общее решение для загрузки моего диапазона файлов данных до любого значения x? Я не знаю, правильно ли я нахожусь на правильном пути, используя glob, поэтому любое другое решение, отличное от glob, также будет очень оценено.
Спасибо заранее!
Я посмотрел на Hadoop Глоба подписи, и кажется, что это должно быть легко сделать, чем мы первоначально думали.
Создайте строку, разделенную запятыми, всех номеров, которые вас интересуют, и назовите ее expectedNumber. например expectedNumbers = "0,1,2,3,4,5", а затем использовать его, как показано ниже:
pigString += "TRAIN = LOAD 'user/hdp/input/custom/Fold1/train" + {expectedNumbers} +".txt' USING PigStorage(' ');";
Надеюсь это поможет.