[HADOOP] 하둡의 매퍼 입력 키 - 값 쌍
HADOOP하둡의 매퍼 입력 키 - 값 쌍
일반적으로 다음과 같은 형식으로 매퍼를 작성합니다.
public static class Map extends Mapper<**LongWritable**, Text, Text, IntWritable>
여기서 mapper에 대한 입력 키 - 값 쌍은
내 질문은 : 매퍼에 대한 입력 키 - 값 쌍을 <텍스트, 텍스트>로 제공하면 오류가 발생합니다.
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
mapper의 입력 키 - 값 쌍을
미리 감사드립니다.
해결법
-
==============================
1.mapper에 대한 입력은 사용되는 InputFormat에 따라 다릅니다. InputFormat은 들어오는 데이터를 읽고 Mapper가 기대하는 형식으로 형식을 지정합니다. 기본 InputFormat은 FileInputFormat
를 확장하는 TextInputFormat입니다. mapper에 대한 입력은 사용되는 InputFormat에 따라 다릅니다. InputFormat은 들어오는 데이터를 읽고 Mapper가 기대하는 형식으로 형식을 지정합니다. 기본 InputFormat은 FileInputFormat
를 확장하는 TextInputFormat입니다. 보다 다른 키 - 값 유형 서명이있는 매퍼를 사용하여 InputFormat을 변경하지 않으면이 오류가 발생합니다. 입력을 예상하면 적절한 InputFormat을 선택해야합니다. 작업 설정에서 InputFormat을 설정할 수 있습니다 : job.setInputFormatClass(MyInputFormat.class);
그리고 말했듯이, 기본적으로이 설정은 TextInputFormat으로 설정됩니다.
이제, 입력 데이터가 쉼표로 구분 된 개행 구분 레코드의 묶음이라고 가정 해 봅니다.
매퍼에 대한 입력 키 ( "A", "value1"), ( "B", "value2")를 원한다면 사용자 정의 InputFormat과 RecordReader를
서명으로 구현해야합니다. 다행히도, 이것은 꽤 쉽습니다. 여기에 예제가 있으며 아마 StackOverflow 주위에 떠있는 몇 가지 예제가 있습니다. 즉, FileInputFormat
를 확장하는 클래스와 RecordReader 를 확장하는 클래스를 추가합니다. FileInputFormat # getRecordReader 메서드를 재정의하고 사용자 지정 RecordReader의 인스턴스를 반환하도록합니다. 그런 다음 필요한 RecordReader 논리를 구현해야합니다. 가장 간단한 방법은 사용자 정의 RecordReader에 LineRecordReader의 인스턴스를 만들고 모든 기본 책임을이 인스턴스에 위임하는 것입니다. getCurrentKey 및 getCurrentValue 메소드에서 LineRecordReader # getCurrentValue를 호출하고 쉼표로 분리하여 쉼표로 구분 된 텍스트 컨텐츠를 추출하는 로직을 구현합니다.
마지막으로 위의 두 번째 단락 뒤에 표시된대로 InputFormat을 Job InputFormat으로 설정하십시오.
-
==============================
2.Tom White의 "Hadoop : The Definitive Guide"책에서 나는 그가 이것에 대한 적절한 대답을 가지고 있다고 생각한다 (197 쪽).
Tom White의 "Hadoop : The Definitive Guide"책에서 나는 그가 이것에 대한 적절한 대답을 가지고 있다고 생각한다 (197 쪽).
"TextInputFormat의 키는 단순히 파일 내의 오프셋이므로 일반적으로 그다지 좋지 않습니다. 유능한. 파일의 각 줄은 구분 기호로 구분 된 키 - 값 쌍이되는 것이 일반적입니다. 탭 문자와 같은 예를 들어, 이것은 다음에 의해 생성 된 출력입니다. TextOutputFormat, Hadoop의 기본 출력 형식. 이러한 파일을 올바르게 해석하려면, KeyValueTextInputFormat 적절하다.
구분 기호는 key.value.separator.in.input.line 재산. 그것 기본적으로 탭 문자입니다. "
-
==============================
3.매퍼 입력을위한 키는 항상 정수형입니다 ... 매퍼 입력 키는 라인의 오프셋 번호를 나타냅니다. 값은 전체 라인을 나타냅니다 ...... 레코드 판독기는 첫 번째 사이클에서 한 줄을 읽습니다. 그리고 mapper의 o / p는 원하는 모든 것이 될 수 있습니다 (그것은 (텍스트, 텍스트) 또는 (텍스트, IntWritable) 일 수 있습니다 ...)
매퍼 입력을위한 키는 항상 정수형입니다 ... 매퍼 입력 키는 라인의 오프셋 번호를 나타냅니다. 값은 전체 라인을 나타냅니다 ...... 레코드 판독기는 첫 번째 사이클에서 한 줄을 읽습니다. 그리고 mapper의 o / p는 원하는 모든 것이 될 수 있습니다 (그것은 (텍스트, 텍스트) 또는 (텍스트, IntWritable) 일 수 있습니다 ...)
from https://stackoverflow.com/questions/19624607/mapper-input-key-value-pair-in-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop Map 텍스트 파일 읽기 줄이기 (0) | 2019.06.14 |
---|---|
[HADOOP] 데이터로드 중 돼지 오류 (0) | 2019.06.14 |
[HADOOP] 권한이 거부되어 "hadoop fs -mkdir"이 실패하는 이유는 무엇입니까? (0) | 2019.06.14 |
[HADOOP] 새로운 Hadoop API의 identityreducer (0) | 2019.06.14 |
[HADOOP] 하이브 란 무엇입니까? 데이터베이스입니까? [닫은] (0) | 2019.06.14 |