2014-06-26 73 views
0

我已經在R中完成了映射縮減代碼以在Amazon EMR中運行。R Reducer在亞馬遜EMR中無法正常工作

我的輸入文件格式: URL1 word1 word2 word3 URL2 word4 word2 word3 URL3 word1 word7 word2

我期待的輸出爲:URL是CONCAT用空格 word1 URL1 URL3 word2 URL1 URL2 URL3 word3 URL1 URL2 .. ... ..

但EMR採用3級減速器和創建3個輸出文件。文件明智的輸出是正確的,它是合併值,沒有重複的鍵。但是如果我們看到3個文件在一起,就有重複的鍵。

輸出文件1: word1 URL1 URL3 word2 URL1 .. ..

輸出文件2: word2 URL2 URL3 word3 URL1 .. ..

看到,word2被分配到2個文件。我需要一個密鑰只在一個文件中。

我在EMR中使用Hadoop Streaming。請建議我使用正確的設置刪除不同文件中的重複密鑰。

我假設我的映射器工作正常。這是我的減速器:

process <- function(mat){ 

rows = nrow(mat) 
cols = ncol(mat) 

for(i in 1:rows) 
{ 

    for(j in i+1:rows) 
    { 
     if(j<=rows) 
     { 
      if(toString(mat[i,1])==toString(mat[j,1])) 
      { 
      x<-paste(mat[i,2],mat[j,2],sep=" ") 
      mat[i,2]=x 
      mat<-mat[-j,] 
      rows<-rows-1 
      } 
     } 
    } 
} 

write.table(mat, file=stdout(), quote=FALSE, row.names=FALSE, col.names=FALSE) 
} 

reduce <- function(input){ 
    #create column names to make is easier to work with the data set 
    names <- c("word", "value") 
    cols = as.list(vector(length=2, mode="character")) 
    names(cols) <- names 

    #read from the input 
    hsTableReader(file=input, cols, ignoreKey=TRUE, chunkSize=100000, FUN=process, sep=" ") 


} 
+0

你可以分享你正在運行的代碼嗎? – josliber

回答

0

您是否嘗試過使用組合器將相同的鍵收集到同一個減速器中?這樣,您應該能夠將具有相似關鍵字的所有單詞收集到單個縮減器中。查看一些wordcount示例與組合器瞭解組合器類如何工作。