[HADOOP] 감속기의 입력 파일을 가져 오기
HADOOP감속기의 입력 파일을 가져 오기
내가 두 번 값을 반복 할 필요가 어디에서 맵리 듀스 작업을 쓰기 위해 노력하고 있어요.
수치 csv 파일이 주어 그래서 우리는 각 열에 대해이를 적용해야합니다.
이를 위해, 우리는 최소 및 최대 값을 발견하고, 식 (V1)에이를 적용해야한다.
내가 지금까지했던 것은
In map()
I emit the column id as key and each column as values
In Reduce()
I calculated the min and max values of each column.
그 후 나는 붙어입니다. 내 목표는 방정식을 적용하는 것입니다 다음으로
(V = (V - 미나) / (MAXA - 미나) * (새 MAXA - 새로운 미나) + 새로운 미나)
나의 새로운 MAXA 새로운 미나는 각각 0.1,0.0이며, 또한 각 열은 최대 및 최소 있습니다. 나는 V를 얻을 필요는 식의 (V1)을 적용 중위, 입력 파일을 즉.
어떻게 얻을 수 있습니까?
내가 불렀어 무슨 생각
입력 CSV 파일에서 첫 번째 행 (홍채 데이터 집합을) 받아
[5.3,3.6,1.6,0.3]
각 속성 EQN 적용 전체 행 (최소 및 최대 값은 감속기 자체로 알려진) 방출. 그러나 감속기에 난 단지 열을 얻을 것이다 values.Or 다른 나는 () 감속기의 () 설정에서 인수로 내 inputfile을 읽어야합니다.
최선의 관행 때문이다. 어떤 제안.
최신 정보
마크 커리가 제안한 것처럼 나는 다음을했다.
public void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException,
InterruptedException {
System.out.println("in reducer");
double min = Integer.MAX_VALUE,max = 0;
Iterator<DoubleWritable> iterator = values.iterator();
ListIterator<DoubleWritable> lit = IteratorUtils.toListIterator(iterator);
System.out.println("Using ListIterator 1st pass");
while(lit.hasNext()){
System.out.println(lit.next());
DoubleWritable value = lit.next();
if (value.get()< min) {
min = value.get();
}
if (value.get() > max) {
max = value.get();
}
}
System.out.println(min);
System.out.println(max);
// move the list iterator back to start
while(lit.hasPrevious()){
lit.previous();
}
System.out.println("Using ListIterator 2nd pass");
double x = 0;
while(lit.hasNext()){
System.out.println(lit.next());
}
1 일 패스에서 나는이 모든 값 correctly.But을 얻을 차 난 단지 반복 각 요소를 얻고 통과 할 수 있어요.
해결법
-
==============================
1.당신은 두 번 같은 축소에 감속기 값을 이상 열거 할 수있다. 첫 번째 시간은 최소 및 최대 및 귀하의 값을 계산 한 후이를 방출하는 두 번째 시간을 계산합니다.
당신은 두 번 같은 축소에 감속기 값을 이상 열거 할 수있다. 첫 번째 시간은 최소 및 최대 및 귀하의 값을 계산 한 후이를 방출하는 두 번째 시간을 계산합니다.
거친 예 :
public void Reduce(string key, List<string> values, Context context) { var minA = Min(values); var maxA = Min(values); foreach (var v in values) { var result = [(v − minA)/(maxA − minA)]*(new maxA − new minA ) + new minA; context.Emit(result); } }
-
==============================
2.나는 답을 발견했다. 우리는 아래로 감속기에 두 번 반복하려는 경우
나는 답을 발견했다. 우리는 아래로 감속기에 두 번 반복하려는 경우
ListIterator<DoubleWritable> lit = IteratorUtils.toListIterator(it); System.out.println("Using ListIterator 1st pass"); while(lit.hasNext()) System.out.println(lit.next()); // move the list iterator back to start while(lit.hasPrevious()) lit.previous(); System.out.println("Using ListIterator 2nd pass"); while(lit.hasNext()) System.out.println(lit.next());
로 우리는 것이다에만 출력
Using ListIterator 1st pass 5.3 4.9 5.3 4.6 4.6 Using ListIterator 2nd pass 5.3 5.3 5.3 5.3 5.3
중위 우리는이 같은 루프해야 올바른 방법으로 그것을 얻을 수 있습니다 :
ArrayList<DoubleWritable> cache = new ArrayList<DoubleWritable>(); for (DoubleWritable aNum : values) { System.out.println("first iteration: " + aNum); DoubleWritable writable = new DoubleWritable(); writable.set(aNum.get()); cache.add(writable); } int size = cache.size(); for (int i = 0; i < size; ++i) { System.out.println("second iteration: " + cache.get(i)); }
산출
first iteration: 5.3 first iteration: 4.9 first iteration: 5.3 first iteration: 4.6 first iteration: 4.6 second iteration: 5.3 second iteration: 4.9 second iteration: 5.3 second iteration: 4.6 second iteration: 4.6
from https://stackoverflow.com/questions/22005722/get-input-file-in-reducer by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 색조 UI 임팔라 시간 (0) | 2019.10.13 |
---|---|
[HADOOP] 왜 하이브 맵리 듀스 작업이 죽었다? (0) | 2019.10.12 |
[HADOOP] 하위 디렉토리의 목록을 가져옵니다 (0) | 2019.10.12 |
[HADOOP] 하둡 : 출력 파일을 두 번 출력을 가지고 (0) | 2019.10.12 |
[HADOOP] 지도는 하둡 프레임 워크에서 데이터 구조를 구현하는 프로그램을 감소 (0) | 2019.10.12 |