[HADOOP] 하둡에서 아 브로 형식의 데이터를 읽기 / 맵리 듀스
HADOOP하둡에서 아 브로 형식의 데이터를 읽기 / 맵리 듀스
나는 HDFS에 저장 하둡에서 아 브로 형식의 데이터를 읽으려고하고있다. 그러나 내가 본 대부분의 예제는 작업에 스키마를 구문 분석하는 우리를 필요로 .. 그러나 나는 그 요구 사항을 이해할 수 없습니다입니다. 나는 돼지와 브로를 사용하고 난 스키마 정보를 전달 적이 없다.
그래서, 내가 뭔가를 누락 될 수 있습니다 생각합니다. 내가 스키마 정보가없는 경우 기본적으로, 무슨 좋은 방법 하둡 맵리 듀스에서 브로 파일을 읽을? 감사
해결법
-
==============================
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), 및 스키마 버전을 다룰 때 물론 더 복잡해진다.
from https://stackoverflow.com/questions/29979282/reading-avro-format-data-in-hadoop-map-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 다른 클래스는 잘 작동 할 때 하나 개의 클래스에 대한 인터페이스 org.apache.hadoop.mapreduce.jobcontext하지만 클래스 예상 발견 한 오류 (0) | 2019.10.13 |
---|---|
[HADOOP] 어떻게 하둡 2.2 oozie에서 맵리 듀스 프로그램을 실행 (0) | 2019.10.13 |
[HADOOP] 하둡 : 작은 파일 CombineFileInputFormat을 사용 하는가는 성능 향상을 제공합니다? (0) | 2019.10.13 |
[HADOOP] 프로그래밍 텍스트 파일의 내용은 HDFS 사용하여 Java에 저장 읽어 들이기 (0) | 2019.10.13 |
[HADOOP] 원격 이클립스 디버깅 하둡 (0) | 2019.10.13 |