我遇到以下问题。我有200k xml文件。我有200个文件夹,每个文件夹有2000个xml文件。我的HDFS中有这个。架构在下面
RootFolder
Folder001
1.xml
2.xml
2000.xml
Folder002
2001.xml
我需要编写一个mapper程序来读取文件并执行一些Xpath过程。
如果我提供 RootFolder 输入路径,那么映射器应该读取文件夹并处理xml文件
那应该有200个任务。每个文件夹应由单个映射器
读取如何处理多个文件夹?
答案 0 :(得分:1)
根据我的理解,你有两个问题:
1:需要通过单个地图任务映射子文件夹中的所有文件:
答案:您可以在此方案中使用CombineFileInputFormat
。它将为指定的PathFilter
分组文件(在您的情况下,过滤器应接受相同文件夹的文件)并将其分配给单个maptask。即,可以实现每个文件夹的maptask。为了获得更好的控制,请扩展CombineFileInputFormat
并使其成为您自己的,就像我在我的案例中所做的那样。
2:通过仅指定根文件夹,需要将子文件夹中的文件也包含在地图任务的输入中。
Ans:在新的API版本中,FileInputFormat
可以将文件从其子文件夹递归到任何级别。
有关详细信息,您可以看到jira here。
或者如果您想自己动手,可以继承FileInputFormat
并覆盖listStatus
方法。