使用RHadoop对数据进行排序

时间:2015-03-22 16:59:10

标签: rhadoop

我在Hadoop& RHadoop。因此,尝试使用RHadoop对Mapreduce结构中的数据进行排序。但我无法对数据进行排序。代码如下。任何人都可以帮我找出我犯错误的地方。尝试这个问题的原因是想知道如何定义关键变量&价值变量。

small.ints=runif(100,10.0,20.0)
data<-sample(1:100,100,replace=F)
data1<-data.frame(data,small.ints)
hdfs.input = to.dfs(data1)
# Mapper
mapper <- function(k,v) {
  key <- data
  value <-small.ints
  keyval(key,value)
}

#Reducer

reducer <- function(k,v) {
  key <- k  
  value <- v
  keyval(key,arrange(v))
}
#mapreduce program
out<-mapreduce(
  input = hdfs.input,
  map = mapper,reduce=reducer)

非常感谢!

1 个答案:

答案 0 :(得分:2)

从您的问题中不清楚您究竟要排序的是什么。从您的代码中可以看出,您正在尝试对每个键中的值(&#39; small.ints&#39;)进行排序。

Reducer对每个键的数据集进行操作。在您的情况下,您有100行的键和值,并且所有键行都是唯一的(因为data = sample(1:100,100,replace = F),基本上&#39;数据&#39;是1:100 in随机顺序)。

这意味着每个键只有一个值。排序方式无关紧要,顺序始终相同:12 = sort(12)= sort(12,减去= TRUE)。

如果您希望将数据集按“数据”排序,那么我认为映射器应为:

mapper <- function(k,v) {
  # input: key = NULL, value = (data, small.ints)
  keyval(k, arrange(v, data))
}

# mapreduce program
out <- mapreduce(
  input = hdfs.input,
  map = mapper,
  reduce = NULL)