2014-06-26 2 views
0

J'ai exécuté un code de réduction de carte dans R pour s'exécuter dans Amazon EMR.R Réducteur ne fonctionne pas correctement dans Amazon EMR

Mon format de fichier d'entrée: URL1 word1 word2 word3 URL2 word4 word2 word3 URL3 word1 word7 word2

je prévois la sortie comme: les URL sont concat avec des espaces word1 URL1 URL3 word2 URL1 URL2 URL3 word3 URL1 URL2 .. ... ..

Mais DME utilise 3 et la création de 3 Réducteurs fichiers de sortie. Fichier sage la sortie est correcte, il combine des valeurs, pas de clés en double. Mais si nous voyons les 3 fichiers ensemble, il y a des clés en double.

fichier de sortie 1: word1 URL1 URL3 word2 URL1 .. ..

fichier de sortie 2: word2 URL2 URL3 word3 URL1 .. ..

Voir, le word2 est distribué à 2 fichiers. J'ai besoin d'une clé dans un seul fichier. J'utilise, Hadoop Streaming dans EMR. S'il vous plaît me suggérer les paramètres corrects pour supprimer les clés en double dans différents fichiers.

Je suppose que mon mappeur fonctionne correctement. Ceci est mon réducteur:

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

Pouvez-vous partager le code que vous utilisez? – josliber

Répondre

0

Avez-vous essayé d'utiliser un combineur pour rassembler les mêmes clés dans le même réducteur? De cette façon, vous devriez être capable de rassembler tous les mots avec une clé similaire dans un seul réducteur. Vérifiez quelques exemples de wordcount avec un combineur pour comprendre comment fonctionne une classe de combineur.

Questions connexes