以下是我的文字文件内容:
name , tag/tags , location, id
xyz, abc;nhj;xygf;xyz;ajsd, jhdwegyugagdwg, T1
xasdiaos, abcd, jhdwegyugagdwg0 , T3
xyzasihd, jsdh;sdgwyi, jhdwegyugagdasodpg, T2
xyzasihd, jsdh;jadh;ahsg;sdgwyi, jhdwegyugagdasodpg, T4
我想输出id和标签总数。 期望的输出如下。
T1 , 5
T3 , 1
T2 , 2
T4 , 4
我在mapreduce
下面写了一段代码。
library(rmr2)
query1= function(input, output = "/user/mtech/15CS60R13/OutputP2"){
q1.map=
function(., lines){
print(lines)
keyval(unlist(strsplit(lines,split=","))[4],
length(unlist(strsplit(unlist(strsplit(lines,split=","))[2],split=";"))))
}
mapreduce(
input = input ,
output = output,
input.format = "text",
map = q1.map,
)
}
query1("/user/xyz/file.txt")
results <- from.dfs ("/user/mtech/15CS60R13/Output")
我得到的结果如下。
print(results)
$key
[1] "T4" "T1"
$val
[1] 4 5
虽然当我尝试下面更改map
函数时,
keyval(lines,1)
我得到所有4行。请解释为什么我在放strsplit
时只能获得2行。
答案 0 :(得分:0)
这是地图中的错误:
q1.map=
function(., lines){
for(line in lines){
keyval(unlist(strsplit(line,split=","))[4],
length(unlist(strsplit(unlist(strsplit(line,split=","))[2],split=";"))))
}
}
谢谢!