- 如果数据存放在hdfs上,一次性需要读取多个则需要批量读取,可以使用下面代码,先获取到路径下的所有文件名,再循环读取。
Configuration conf=new Configuration();
FileSystem hdfs=FileSystem.get(conf);
//这里的路径是在hdfs上的存放路径,但是事先需将hdfs-site.xml文件放在工程的source文件下,这样才能找到hdfs
Path path=new Path("user/my/testData/201912/");
FileStatus[] stats=hdfs.listStatus(path);
for (int i=0; i<stats.length; i++){
//打印每个文件路径
System.out.println(stats[i].getPath().toString());
//读取每个文件
InputStream inputStream=hdfs.open(stats[i].getPath());
InputStreamReader inputStreamReader= new InputStreamReader(inputStream);
BufferedReader reader=new BufferedReader(inputStreamReader);
String line="";
while((line=reader.readLine())!=null){
System.out.println(line);
//可以在这里对每一条数据进行处理
}
}
- 如果需要使用通配符,匹配得到多个文件路径或者多个文件夹下面的多个文件路径,需要修改上面代码中的两行
//匹配得到某个文件夹下所有文件路径
Path path=new Path("user/my/testData/201912/*");
FileStatus[] stats=hdfs.globStatus(path);
//匹配得到符合某个条件下的所有文件夹下的文件路径
//例如匹配文件夹名以2019开头的目录下所有文件
Path path=new Path("user/my/testData/2019*/*");
FileStatus[] stats=hdfs.globStatus(path);
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。