Это довольно уродливое решение, но глобусы, которые не используют синтаксис *
, похоже, работают.Итак, в нашем рабочем процессе (перед вызовом нашего сценария pig) мы перечисляем все файлы под интересующим нас префиксом, а затем создаем определенный глобус, который состоит только из тех путей, которые нам интересны.
Например, в приведенном выше примере мы перечисляем «mybucket / a»:
hadoop fs -lsr s3://mybucket/a
, который возвращает список файлов плюс другие метаданные.Затем мы можем создать глоб из этих данных:
myData = load 's3://mybucket/a/b{/myfile.log,/yourfile.log}' as ( ... )
Это требует немного больше внешней работы, но позволяет нам специально ориентироваться на интересующие нас файлы и избегать 0-байтовых файлов.
Обновление: К сожалению, я обнаружил, что это решение не работает, когда шаблон глобуса становится длинным;В результате Pig выдает исключение «Невозможно создать входной фрагмент».