Hadoop-Cascading: частичное касание источника каталога

Мои данные имеют такую ​​структуру:

+data
|-2014080700_00.txt
|-2014080700_01.txt
|-2014080701_00.txt
|- ...
|-2014080723_00.txt
|-2014080800_00.txt
|- ...
|-2014090800_00.txt

Я знаю, что могу использовать весь файл внутри каталога данных с Tap, как показано ниже:

Tap inTap = new Hfs( new TextLine(), "/path/to/data"); 

Но мне нужна определенная часть каталога, например, только файл на дату 20140807. Следовательно, он будет включать все файлы с префиксом 20140807. Есть ли способ сделать это с помощью каскадирования? Или есть способ сделать это ошпариванием?


person dieend    schedule 30.09.2014    source источник


Ответы (1)


Я не думаю, что вы можете сделать это с помощью Hfs, но можно использовать GlobHfs.

Попробуйте следующее:

Tap inTap = new GlobHfs( new TextLine(), "/path/to/data/", new GlobFilter("20140807*"));

Это создает кран Globbing, используя каталог «/path/to/data/» в качестве источника и фильтруя файлы внутри с использованием шаблона "20140807*" glob, переданного в GlobFilter.

person soulcheck    schedule 30.09.2014
comment
Спасибо, я не знаю, что GlobHfs существует. И из документации также принимается объект PathFilter, который, как я предполагаю, мы можем создать собственный фильтр, верно? - person dieend; 01.10.2014
comment
@dieend да, просто расширьте PathFilter. - person soulcheck; 01.10.2014
comment
Я думал, что PathFilter будет использовать все файлы в подкаталоге в качестве аргументов, если inputPath указывает на каталог. По-видимому, мне нужно использовать path/to/directory/*, чтобы использовать все файлы в подкаталоге в качестве аргументов PathFilter. - person dieend; 02.10.2014