어떤 이유로 rmr2가 특정 상황에서 키를 부적절하게 처리하여 각 값의 키를 복제하는 것으로 보입니다.rmr2가 내 매퍼에서 키를 복제 중임
Windows 7에서 R 버전 3.1.1 (64 비트 버전)을 사용하고 있습니다. 내 rmr 버전은 rmr2_2.3.0입니다.
rmr.options (backend = "local")를 설정하여 로컬 모드를 사용하고 있습니다.
library(rmr2)
from.dfs(
mapreduce(
input=f,
input.format="text",
map = function(k,v) keyval(k,v)))
:
a|1|blue
b|2|green
c|1|green
d|3|blue
e|2|yellow
내가 쉽게 f는 내 파일의 경로입니다 다음지도-감소 일 이러한 내용을 검색 할 수 있습니다
나는이 내용은 매우 간단한 텍스트 파일이출력은 예상대로입니다 :
$key
NULL
$val
[1] "a|1|blue" "b|2|green" "c|1|green" "d|3|blue" "e|2|yellow"
은 내가 LENG를 할당 작업을 줄이고 다른지도를 실행할 수 있습니다 키로 선의 번째는 감속기에 전달한다 :
예상대로from.dfs(
mapreduce(
input=f,
input.format="text",
map = function(k,v) keyval(str_length(v),v)))
출력이 대신 값의 길이
$key
[1] 8 8 9 9 10
$val
[1] "a|1|blue" "d|3|blue" "b|2|green" "c|1|green" "e|2|yellow"
는 I 대신 첫 번째 문자를 취할 수 :
from.dfs(
mapreduce(
input=f,
input.format="text",
map = function(k,v) keyval(substr(v,0,1),v)))
출력은 다시 예상대로이다
지금까지 그렇게 좋았습니다. 이제 값을 나누고 첫 번째 필드를 사용하고 싶습니다. 내 코드는 다음과 같습니다
from.dfs(
mapreduce(
input=f,
input.format="text",
map = function(k,v) keyval(unlist(strsplit(v,'\\|'))[1],v)))
출력이 매우 예기치 않게이며,이 시간 :
$key
[1] "a" "a" "a" "a" "a"
$val
[1] "a|1|blue" "b|2|green" "c|1|green" "d|3|blue" "e|2|yellow"
내가 대신 키 벡터 존재의, 문자열을 사용하여 이전 예제와 같은 출력을 볼 기대 "a" "b" "c" "d" "e"이것은 첫 번째 키가 단지 5 번 반복 된 것입니다. "a" "a" "a" "a" "a".
나는 세 번째 필드에 예를 들어 내가 얻으려고 노력하고있는 필드를 변경할 수 있습니다
from.dfs(
mapreduce(
input=f,
input.format="text",
map = function(k,v) keyval(unlist(strsplit(v,'\\|'))[3],v)))
다시 첫 번째 키 대신 모든 값에 대한 고유 키의 반복
. 출력은 다음과 같습니다.$key
[1] "blue" "blue" "blue" "blue" "blue"
$val
[1] "a|1|blue" "b|2|green" "c|1|green" "d|3|blue" "e|2|yellow"
나는 이것으로 끝내고 있습니다. 무슨 일 이니? 이것은 rmr2의 버그입니까, 아니면 무엇입니까?
업데이트 : 완전히 분산 된 HDP2 클러스터가있는 rmr2_3.1.1을 실행하는 우분투 12.04 시스템에서 동일한 예제를 시도하고 거의 동일한 결과를 얻었습니다. 기대 한 결과를 반환하는 예제의 경우, 키 쌍의 순서가 파일 (이해할 수 있음)과 같지 않다는 유일한 차이점이 있습니다.문제가있는 예제의 경우 더 이상한 결과가 나옵니다.
$key
[1] "d" "d" "a" "a" "a"
$val
[1] "d|3|blue" "e|2|yellow" "a|1|blue" "b|2|green" "c|1|green"
당신이 당신의 순발력 끝에 있다면, 아마도 rmr2의 이슈 트래커에 버그를 제기 할 시간 . SO보다 더 많은 인터넷이 있습니다. – piccolbo