복붙노트

[HADOOP] 하둡에서 아 브로 형식의 데이터를 읽기 / 맵리 듀스

HADOOP

하둡에서 아 브로 형식의 데이터를 읽기 / 맵리 듀스

나는 HDFS에 저장 하둡에서 아 브로 형식의 데이터를 읽으려고하고있다. 그러나 내가 본 대부분의 예제는 작업에 스키마를 구문 분석하는 우리를 필요로 .. 그러나 나는 그 요구 사항을 이해할 수 없습니다입니다. 나는 돼지와 브로를 사용하고 난 스키마 정보를 전달 적이 없다.

그래서, 내가 뭔가를 누락 될 수 있습니다 생각합니다. 내가 스키마 정보가없는 경우 기본적으로, 무슨 좋은 방법 하둡 맵리 듀스에서 브로 파일을 읽을? 감사

해결법

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

    1.네 말이 맞아, 아 브로 미리 유형을 알고에 대해 매우 엄격하다. 당신은 어떤 생각을 스키마가없는 경우 내가 아는 유일한 옵션은하는 GenericRecord로 읽는 것입니다. 여기에 그 작업을 수행하는 방법의 조각이다

    네 말이 맞아, 아 브로 미리 유형을 알고에 대해 매우 엄격하다. 당신은 어떤 생각을 스키마가없는 경우 내가 아는 유일한 옵션은하는 GenericRecord로 읽는 것입니다. 여기에 그 작업을 수행하는 방법의 조각이다

    public class MyMapper extends extends Mapper<AvroKey<GenericRecord>, NullWritable, ... > {
        @Override
        protected void map(AvroKey<GenericRecord> key, NullWritable value, Context context) throws IOException, InterruptedException {
            GenericRecord datum = key.datum();
            Schema schema = datum.getSchema();
            Object field1 = datam.get(0);
            Object someField = datam.get("someField");
            ...
        }
    }
    

    자바는 그것이 어떤 종류의 알지하지 않기 때문에 당신은, 물론 좋은 getter와 setter이 없습니다. 사용할 수있는 유일한 게터 위치 또는 이름 중 하나에 의해 필드를 검색 할 수 있습니다. 당신은 당신이 필드로 알고있는 형식으로 결과를 캐스팅해야합니다. 당신이 모르는 경우에, 당신은 (당신이 처음 스키마에 액세스 할 수 있는지 생각대로로 도움이되지 왜이도) 자바는 정적으로 컴파일되어 있기 때문에, 모든 가능성에 대한 검사 instanceof를 가지고해야합니다.

    당신이 유형이 될 수있다 (또는이어야한다)을 알고 있다면, 당신은 그때 하나를 필드를 매핑, 그것의 새로운 인스턴스를 생성, (당신이 당신의 입력이 될 것으로 기대 것을) avsc에서 생성 된 클래스에 getSchema ()를 호출 할 수 있습니다 GenericRecord에서 그 새로운 객체 위에 하나. 이것은 정상 브로 방법에 대한 액세스를 다시 줄 것입니다. 노동 조합, 널 (null), 및 스키마 버전을 다룰 때 물론 더 복잡해진다.

  2. from https://stackoverflow.com/questions/29979282/reading-avro-format-data-in-hadoop-map-reduce by cc-by-sa and MIT license