• R语言
  • 求R在hadoop上运行的问题

rm(list=ls()); gc();

library(rmr2); library(rhdfs);

hdfs.init();

groups = rbinom(32, n = 50, prob = 0.4)

groups2 = to.dfs(groups)

from.dfs(mapreduce(input = groups2, map = function(k,v) keyval(v, 1),

reduce = function(k,vv) keyval(k, length(vv)),

output = '/user/****/tmp'));

为什么在tmp文件下看到的是乱码?有人知道怎么解决吗?

回复 第1楼 的 ding_R:目测是输出格式的问题。指定output.format='text'试试呢

回复 第2楼 的 波波头一头:

output.format='text',这样设置会出错;但是,output.format = make.output.format(mode="text"),也是乱码。

好奇怪:::

<br />
require(rmr2)</p>
<p>from.dfs(mapreduce(input = groups2, map = function(k,v) keyval(v, 1),<br />
reduce = function(k,vv) keyval(k, length(vv)),<br />
output = '/user/yibo/tmp'))</p>
<p>$key<br />
 [1]  6  8  9 10 11 12 13 14 15 16 17 19<br />
$val<br />
 [1] 1 1 5 4 9 7 5 6 4 2 4 2</p>
<p>system('hadoop fs -cat /user/yibo/tmp/part-00000')<br />
SEQ/org@3yibo@chen:~$ edbytes.TypedBytesWritable/org.apache.hadoop.typedbytes.TypedBytesWritablel\�������b�"</p>
<p>from.dfs(mapreduce(input = groups2, map = function(k,v) keyval(v, 1),<br />
reduce = function(k,vv) keyval(k, length(vv)),<br />
output.format='text',<br />
output = '/user/yibo/tmp2'))</p>
<p>$key<br />
 [1]  0  4  8 12 17 22 27 32 37 42 47 52<br />
$val<br />
 [1] "6\t1"  "8\t1"  "9\t5"  "10\t4" "11\t9" "12\t7" "13\t5" "14\t6" "15\t4"<br />
[10] "16\t2" "17\t4" "19\t2"</p>
<p>system('hadoop fs -cat /user/yibo/tmp2/part-00000')<br />
6	1<br />
8	1<br />
9	5<br />
10	4<br />
11	9<br />
12	7<br />
13	5<br />
14	6<br />
15	4<br />
16	2<br />
17	4<br />
19	2<br />
</p>

用R写map-reduce,有点闲庭信步、举重若轻的感觉。[s:11]

在mapreduce()函数中,通过参数backend.parameters = list(hadoop = list(D = "mapred.reduce.tasks=1"))可以设置reduce的任务数量为1,具体设多少可以视任务大小来确定。

24 天 后

为啥我这边的结果是这样的?

$key

[1] 5.304989e-315

$val

[1] 50

是乱码导致的吗?我用的是putty,编码是UTF-8

4 个月 后

求教这个问题是怎么解决的?

3 年 后
楼主最后是怎么解决的?试了各种方法都不行 :-(