我有以下问题。 我有20万个的XML文件。 我有200个文件夹和每个文件夹具有2000的XML文件。 我有这个在我的HDFS。 体系结构如下
RootFolder
Folder001
1.xml
2.xml
2000.xml
Folder002
2001.xml
我需要写一个映射程序来读取这些文件,并做一些Xpath的过程。
如果我给RootFolder输入路径则映射器应阅读的文件夹和处理XML文件
这是应该有200任务。 而每个文件夹应该由一个单一的映射器读取
如何处理多个文件夹?
从我的理解,你有2个问题:
1:需要通过一个单一的地图任务的子文件夹中的所有文件映射:
答:您可以利用CombineFileInputFormat
对于这种情况。 它将为一组指定的文件PathFilter
(在你的情况下,过滤器应该接受同一文件夹中的文件),并将其分配给单个maptask。 即,每个文件夹maptask可以实现的。 为了得到更好的控制,请延长CombineFileInputFormat
和使你自己,这就是我在我的情况下做的。
2:需要包括子文件夹内的文件也作为地图的任务(S)输入,通过指定唯一的根文件夹。
答:在新的API发布, FileInputFormat
可以递归及其子文件夹取得文件到任何水平。 欲了解更多信息,你可以看到JIRA 这里 。
或者,如果你想自己,子类做FileInputFormat
并覆盖listStatus
方法。