복붙노트

[HADOOP] Hadoop : 한 쌍의 값을 '키'로 사용할 수 있습니까?

HADOOP

Hadoop : 한 쌍의 값을 '키'로 사용할 수 있습니까?

큰 범죄 통계 데이터 세트를 분석하려고하는데이 파일은 약 2GB의 CSV 형식입니다. 약 20 개의 열이 있지만 그 중 일부에만 관심이 있습니다 (Crime_Type 및 Crime_in_Year). 예를 들어, 범죄 유형은 "강도질"로, 2001 년부터 2013 년까지 매년 발생합니다. 나는 매년 강도 사건 발생 건수를 계산하는 결과를 원합니다.

그래서 열쇠를 가질 생각이고, 값은 2003 년에 그 값의 합계가 될 것입니다. 한 쌍의 값을 hadoop / mapreduce의 키로 사용할 수 있습니까?

해결법

  1. ==============================

    1.키는 Writable을 구현하는 한 무엇이든 될 수 있습니다. 여기에 표시된대로 사용자 정의 키를 매우 쉽게 작성할 수 있습니다.

    키는 Writable을 구현하는 한 무엇이든 될 수 있습니다. 여기에 표시된대로 사용자 정의 키를 매우 쉽게 작성할 수 있습니다.

    문서에서 빌리면 구현이

    public class CrimeWritable implements Writable {    
           private int year;
           private String type;
    
           public void write(DataOutput out) throws IOException {
             out.writeInt(year);
             out.writeBytes(type);
           }
    
           public void readFields(DataInput in) throws IOException {
             year = in.readInt();
             type = in.readBytes();
           }
    
           public static CrimeWritable read(DataInput in) throws IOException {
             CrimeWritable w = new CrimeWritable();
             w.readFields(in);
             return w;
           }
         }
    

    관련 메모에서 Cascading 또는 Apache Spark와 같은 map-reduce보다 높은 수준의 추상화를 사용하는 것이 좋습니다.

  2. ==============================

    2.한 가지 가능한 조합은 다음과 같습니다. map () 함수에서 다음과 같이 키 값 쌍을 생성합니다. (Crime_Year CrimeType, value) 키를 "Crime_Year Burglary"로 설정하고 값을 정수 값으로 지정하십시오. 이것은 실제로 주어진 데이터 세트에서 범죄 유형이 "강도질"인지 확인한 다음 Crime_Year를 그것과 연결하고이 String을 키로 설정하고 값을 정수 1로 설정한다는 것을 의미합니다.

    한 가지 가능한 조합은 다음과 같습니다. map () 함수에서 다음과 같이 키 값 쌍을 생성합니다. (Crime_Year CrimeType, value) 키를 "Crime_Year Burglary"로 설정하고 값을 정수 값으로 지정하십시오. 이것은 실제로 주어진 데이터 세트에서 범죄 유형이 "강도질"인지 확인한 다음 Crime_Year를 그것과 연결하고이 String을 키로 설정하고 값을 정수 1로 설정한다는 것을 의미합니다.

    reduce ()에서 모든 값을 동일한 키로 요약합니다.

    예: map () 출력 :  <2001 년 강도, 1> <2001 년 강도, 1> <2002 년 강도질, 1> <2003 년 강도질, 1>

    reduce () 출력 (동일한 키의 값을 합산) :

    <2001 년 강도질, 2> <2002 년 강도질, 1> <2003 년 강도질, 1>

    결국 당신은 총 아니오를 얻을 것입니다. 범죄의 해마다.

  3. from https://stackoverflow.com/questions/19442057/hadoop-can-you-use-a-pair-of-values-as-key by cc-by-sa and MIT license