- 如果数据存放在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);
网友评论