如何制作两个文件的学习列表
How to make a learning list of two files
你好,我想在 hadoop 中制作一个学习列表,这样如果我有两个文件示例:positivereview.txt 和 negativereview.txt 并且每个文本都有以下评论:
(positivereview.txt)
评论编号 1:电影看起来很酷,我真的很喜欢它,尤其是动作部分。
评论编号 2...
评价 id 3...等...
(negativereview.txt)
评论编号 1:电影糟透了,我看了细节,动作刚刚好。
评论编号 2...
评价 id 3...等...
我想开发的程序的输出应该是这样的(一个文件中的两个 txt 文件的结果):
in:2p/2n
上午:7 点/3 点
电影:5p/2n
即:8p/9n
(p - positivereview.txt
n- negaivereivew.txt)
我在 hadoop-mapreduce-examples-2.7.3.jar 上使用这个 wordcount java 程序,但它只会计算两个文档中的所有单词,而不是像我想要的那样分开..
我应该如何构建它,是否可以修改 hadoop-mapreduce-examples-2.7。3.jar(来自 hadoop 包含的库..)所以我可以做到这一点
谢谢
假设您从 运行 pos.txt 和 neg.txt.
上的 WordCount 程序获得了两个输出文件
我假设输出文件结构是这样的
在 2
电影 3
那个6
...
你需要再写一个MapReduce程序(输入作为之前MapReduce的输出目录)键值对应该是这样的
更新:
class PosNegMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String s_arr[] = value.toString().split("\s");
int val = Integer.parseInt(s_arr[1]);
context.write(new Text(s_arr[0]), new IntWritable(val));
}
}
class PosNegReducer extends Reducer<Text, IntWritable, Text, Text> {
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
ArrayList<IntWritable> arls = new ArrayList<>();
for( IntWritable val : values){
arls.add(val);
}
if(arls.size()<2)
arls.add(new IntWritable(0));
String s = arls.get(0) + "p/" + arls.get(1) + "n" + System.getProperty("line.separator"); //Here, I took liberty that the word must be in both files.
Text result=new Text(s);
context.write(key, result);
}
}
更新 1:
我想我误会了什么。所以,从第一步开始看。
1) 初始文件为 posReviews.txt and negReviews.txt.
2) 所以,现在 运行 WordCount MapReduce 在这两个文件上。(处理像这样的情况
标点符号、大小写字母等)
3) 因此,从这个 MapReduce 中,您将得到两个文件 pos.txt and neg.txt
4) 现在,PosNeg.java & use this pom.xml to build single jar using maven. Setup Maven for windows。使用 Netbeans 顺利完成任务(在设置项目时查看包名称、GroupID 和其他内容)。
5) 您将得到一个 jar,其中包含名称为 "PosNeg-1.0-SNAPSHOT-jar-with-dependencies" 的所有必需文件。 运行 这个 jar 使用命令 "hadoop jar .../PosNeg-1.0-SNAPSHOT-jar-with-dependencies.jar com.ga.posneg.PosNeg input_dir output_dir"
试试这个然后告诉我。
你好,我想在 hadoop 中制作一个学习列表,这样如果我有两个文件示例:positivereview.txt 和 negativereview.txt 并且每个文本都有以下评论:
(positivereview.txt) 评论编号 1:电影看起来很酷,我真的很喜欢它,尤其是动作部分。 评论编号 2... 评价 id 3...等...
(negativereview.txt) 评论编号 1:电影糟透了,我看了细节,动作刚刚好。 评论编号 2... 评价 id 3...等...
我想开发的程序的输出应该是这样的(一个文件中的两个 txt 文件的结果):
(p - positivereview.txt
n- negaivereivew.txt)
我在 hadoop-mapreduce-examples-2.7.3.jar 上使用这个 wordcount java 程序,但它只会计算两个文档中的所有单词,而不是像我想要的那样分开..
我应该如何构建它,是否可以修改 hadoop-mapreduce-examples-2.7。3.jar(来自 hadoop 包含的库..)所以我可以做到这一点
谢谢
假设您从 运行 pos.txt 和 neg.txt.
上的 WordCount 程序获得了两个输出文件我假设输出文件结构是这样的
在 2
电影 3
那个6
...
你需要再写一个MapReduce程序(输入作为之前MapReduce的输出目录)键值对应该是这样的
更新:
class PosNegMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String s_arr[] = value.toString().split("\s");
int val = Integer.parseInt(s_arr[1]);
context.write(new Text(s_arr[0]), new IntWritable(val));
}
}
class PosNegReducer extends Reducer<Text, IntWritable, Text, Text> {
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
ArrayList<IntWritable> arls = new ArrayList<>();
for( IntWritable val : values){
arls.add(val);
}
if(arls.size()<2)
arls.add(new IntWritable(0));
String s = arls.get(0) + "p/" + arls.get(1) + "n" + System.getProperty("line.separator"); //Here, I took liberty that the word must be in both files.
Text result=new Text(s);
context.write(key, result);
}
}
更新 1:
我想我误会了什么。所以,从第一步开始看。
1) 初始文件为 posReviews.txt and negReviews.txt.
2) 所以,现在 运行 WordCount MapReduce 在这两个文件上。(处理像这样的情况 标点符号、大小写字母等)
3) 因此,从这个 MapReduce 中,您将得到两个文件 pos.txt and neg.txt
4) 现在,PosNeg.java & use this pom.xml to build single jar using maven. Setup Maven for windows。使用 Netbeans 顺利完成任务(在设置项目时查看包名称、GroupID 和其他内容)。
5) 您将得到一个 jar,其中包含名称为 "PosNeg-1.0-SNAPSHOT-jar-with-dependencies" 的所有必需文件。 运行 这个 jar 使用命令 "hadoop jar .../PosNeg-1.0-SNAPSHOT-jar-with-dependencies.jar com.ga.posneg.PosNeg input_dir output_dir"
试试这个然后告诉我。