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=" ")
}
Pouvez-vous partager le code que vous utilisez? – josliber