본문 바로가기

춤추는 프로그래머/Big Data

Sorting FileStatus[]/정렬하기





아래 링크에서 퍼옴 


https://issues.apache.org/jira/browse/HADOOP-9066





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//테스트케이스 작성시에 대충 이런것들이 필요하다. 
import java.io.IOException;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ConcreteFileStatusAscComparable;
import org.apache.hadoop.util.FileStatusTool;
 
//Comparator의 인터페이스를 구현해 주면 됨. 아래에 인터페이스와 클래스 등 모아놔 봤다. 
 
public interface FileStatusComparable extends Comparator<FileStatus>
    {
        public int compare(FileStatus fileStatus1, FileStatus fileStatus2);
 
    }
 
    public class ConcreteFileStatusAscComparable implements FileStatusComparable
    {
 
        public int compare(FileStatus fileStatus1, FileStatus fileStatus2)
        {
            return fileStatus1.getPath().getName().compareTo(fileStatus2.getPath().getName());
        }
 
    }
 
    public static void sortFileStatus(FileStatus[] inputFiles, FileStatusComparable fileStatusComparable)
    {
        Arrays.sort(inputFiles, fileStatusComparable);
    }






1
2
3
4
5
6
7
8
9
10
11
// 실제로는 이런식으로 그냥 몰아 놔 봤다. 이러케 구현하면 객체지향이 아니라고 하던데. 난 개념없다 ㅠ
 
            FileStatus[] status = ls(hdfsDirectory);    //listStatus를 따로 함수로 빼 놨다. 
                        
            Arrays.sort(status, new Comparator() {
                public int compare(Object o1, Object o2) {
                    String s1 = ((FileStatus) o1).getPath().getName();
                    String s2 = ((FileStatus) o2).getPath().getName();
                    return s1.compareTo(s2);
                }
            });    



하둡 툴을 구현 중인데 ls치면 최소한 시스템에 들어있는 순서대로 가져올 줄 알았는데 아닌걸 보고 멘붕. 아마 콘솔에는 이름 순 혹은 생성된 날짜 순으로 뿌려주고 얘가 가져올 때는  뭐.. 또 다른 기준에 의해 혹은 랜덤으로 ???????????? 가져오나보다. 
세 개의 파일을 가져오는데 콘솔에서 볼 때는 이름순으로 뿌려져 있는데 가져와 보니 2-1-3 뭐 이런 식으로 가져와서 깜놀했쟈냐.