R (Hadoop Streaming)을 사용하여 기본 MapReduce를 작성하려고합니다.R 하둡 매퍼 오류 첨자가 범위를 벗어났습니다.
1 15.55511341
2 27.53983952
3 39.7767569
4 47.44065279
5 55.0606804
6 68.57527802
7 77.03639749
8 80.92939421
9 94.4431412
10 106.5353655
내가 다음 명령을 사용하여 명령 프롬프트에 직접 매퍼를 실행 시도 : 아래 주어진
이#! /usr/bin/env Rscript
con <- file("stdin",open = "r")
while(length(line <- readLines(con = con,n = 1,warn = FALSE)) > 0)
{
line1 <- gsub("^\\s+|\\s+$", "", line)
if(is.null(strsplit(line1," ")) == FALSE){
x <- as.numeric(unlist(strsplit(line1," "))[[1]])
y <- as.numeric(unlist(strsplit(line1," "))[[2]])
x2 <- x*x
xy <- x*y
cat(x,"\t",y,"\t",xy,"\t",x2,"\n")
}
}
close(con)
이에 대한 입력 파일은 두 개의 열이 있습니다 다음은 내가 쓴 매퍼 기능입니다 :
:cat ../data/Input.txt | ./mapper.R
는 그러나, 나는 다음과 같은 오류 메시지가
코드에서 몇 가지 기본적인 실수를 저지른 것처럼 보입니다. 누군가이 문제와 관련하여 나를 도울 수 있습니까?
입력 텍스트의 첫 번째 줄에는 공백이 2 개 있습니다. 두 번째, 세 번째 등등. 'strsplit'으로 분할하기 전에 각 라인의 공백 수를 계산해야합니다. –
어떻게 공백을 찾았습니까? 텍스트 파일에서 두 값 사이의 탭만 볼 수 있습니다. 나는 공백을 다듬기 위해 다음 두 줄을 추가하려고했다. trimWhiteSpace <- function (line) gsub ("(^ +) | (+ $)", "", line); (strsplit (line1, "")) [1] : 범위 밖의 첨자 실행 중지 – Ravi
그래서 재현 할 수없는 예제입니다. 그리고' '\ t' '를 사용하여 표를 제거하는 것이 좋습니다. –