lyyl213 wc.map = function(k,v) { delim= strsplit(v,split = '01') #keyval(delim[[1]][1],delim[[1]][3]) keyval(sapply(delim, function(x) x[1]),delim[[1]][3]) } 这两个返回的长度不一样,可是key val 是一样的啊
皮皮米菲兔 举个栗子 <br /> v <- c('a01a011', 'a01a012', 'b01b014', 'v01c016')<br /> delim <- strsplit(v, split='01')<br /> k1 <- delim[[1]][1]<br /> v1 <- delim[[1]][3]<br /> k2 <- sapply(delim, function(x) x[1])<br /> v2 <- delim[[1]][3]</p> <p>k1<br /> [1] "a"<br /> v1<br /> [1] "1"<br /> k2<br /> [1] "a" "a" "b" "v"<br /> v2<br /> [1] "1"<br /> </p>
lyyl213 v <- 'a01a011' delim <- strsplit(v, split='01') k1 <- delim[[1]][1] v1 <- delim[[1]][3] 用这种形式 我原始数据有几万独立的 key 但是最终只返回几百个key 而且不报错
皮皮米菲兔 好吧除非你配置了map只处理一条记录。。。 貌似是这样 <br /> rmr.options(keyval.length=1)<br /> 但我之前做的时候发现好像最小是100。。。 </p>
lyyl213 默认好像是1000,我设置为1是,返回不到一半的数据, 1000时只返回了40个不同的id,很郁闷,不知哪里出了问题 将近10000个不同的id,为什么只返回了这么少,我的key是不同的id
lyyl213 一条记录一行,使用01隔开的 mapfirst = function(k,v) { v.1 = strsplit(v,split='01')[[1]] keyval(v.1[2],v.1[5]) #v.1[2] id v.1[5] 喜好 } mapreduce(input='/user/hadoop/bs/tmp_01',map=mapfirst) 这是我的测试代码,但就是没有返回全部的不同id
皮皮米菲兔 回复 第14楼 的 lyyl213: <br /> v.1 = strsplit(v,split='01')[[1]]<br /> 这句不就是只取了第一条记录么。。。我上面给过例子了呀 你读进来好多记录,但是只保留第一条,最后得到的记录可不就少了嘛 </p>
lyyl213 还有如果 key=a,val=c(1:3) key=b,val=c(1:5) 如果是rmr的时候一条key对应一条val 但是rmr2是key在一起为一个向量 val为一向量,那么怎么判断哪个val属于哪个key, 难道要paste(val),还是有其它方法?
lyyl213 那我设置 rmr.options(keyval.length=1) 读入一行,返回一行,但是9142条数据只返回4987条 你解释的读入X条,只返回一条,相当于简单抽样了 如果是这样,还有什么意义?
皮皮米菲兔 回复 第19楼 的 lyyl213:确实没意义啊,但是你就是这样做的啊 ="= rmr.options(keyval.length=1)这个设置了没用,默认至少是100的。 关于这个,我之前提过issue,你可以参考一下 https://github.com/RevolutionAnalytics/RHadoop/issues/142
lyyl213 这也太酷毙了,我若是处理组合 c(1:20)在生成1-5个项的情况下就很多数据了 一次读入1000条这种数据,在一个map中岂不是 很多?一次读一条数据就会生成很多组合 默认读入1000条数据,那生成的数据可想而知 这种处理方式不合理啊