Java映射reduce-reduce中的计数属性
我正在做地图缩小。我有两个数据集。我必须根据一个ID将这两种方法结合起来,并分别计算每个上下文中ID出现的次数。例如,如果它列出了在几个州运营的旅行社的数据,我需要的输出格式是:用户ID-纽约的访问次数计数,IL的访问次数计数。该数据集包含字段状态:“NY”。我有一组预定义的状态ny,IL 虽然有数据,但在减少它时,我总是将计数设为零。 我的输出是所有ID的UID 0。 下面是我的代码:Java映射reduce-reduce中的计数属性,java,apache,hadoop,count,mapreduce,Java,Apache,Hadoop,Count,Mapreduce,我正在做地图缩小。我有两个数据集。我必须根据一个ID将这两种方法结合起来,并分别计算每个上下文中ID出现的次数。例如,如果它列出了在几个州运营的旅行社的数据,我需要的输出格式是:用户ID-纽约的访问次数计数,IL的访问次数计数。该数据集包含字段状态:“NY”。我有一组预定义的状态ny,IL 虽然有数据,但在减少它时,我总是将计数设为零。 我的输出是所有ID的UID 0。 下面是我的代码: `import java.io.IOException; import java.util.*; impo
`import java.io.IOException;
import java.util.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
public class myMap {
/* Map*/
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> {
public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer tokens = new StringTokenizer(line, ",");
Boolean eventFlag = false;
String UID = "", state = "";
while (tokens.hasMoreTokens()) {
String currToken = tokens.nextToken();
String[] keyValue = currToken.split(":");
if (keyValue[0].equals( "state")) {
state = keyValue[1].trim();
}
if (keyValue[0].equalsIgnoreCase( "user")) {
UID = keyValue[1];
}
}
output.collect(new Text(UID), new Text(state));
}
}
/* Reducer*/
public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text,Text> {
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
int nyCnt = 0;
int ilCnt = 0;
String currValue = new String();
while (values.hasNext()) {
currValue = values.next().toString();
if (currValue.equalsIgnoreCase("NY")) {
nyCnt+=1;
}
if (currValue.equalsIgnoreCase("IL")) {
ilCnt+=1;
}
output.collect(key , new Text(currValue));
}
String counts = Integer.toString(nyCnt) + " " + Integer.toString(ilCnt);
output.collect(key, new Text(counts) );
}
}
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(myMap.class);
conf.setJobName("myMap");
conf.setJarByClass(myMap.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(Text.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
`
任何关于错误的帮助都是有用的。多谢各位 你能发布你的输入文件吗?数据文件不能在互联网上共享。更详细的格式-有一个文件userData.txt,它有UID:xxxx;另一个文件tourData.txt的UID:xxxx,state:NY。输出所需id UID number\u的\u次\u次\u次\u次\u用户\u次\u次\u次