a,b,c,d
a,s,d,f
d,f,g,c 就如此格式,
代码如下,比wordcount还要简单一点,代码差不多的
package make.hadoop.com.four_column;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class four_column extends Configured implements Tool {
// 1、自己的map类
// 2、继承mapper类,<LongWritable, Text, Text,
// IntWritable>输入的key,输入的value,输出的key,输出的value
public static class MyMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
private IntWritable MapOutputkey = new IntWritable(1);
private Text MapOutputValue = new Text();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String strs = value.toString();
// 分割数据
String str_four = strs.split(",")[3];
MapOutputValue.set(str_four);
System.out.println(str_four);
context.write(MapOutputValue, MapOutputkey);
}
}
// 2、自己的reduce类,这里的输入就是map方法的输出
public static class MyReduce extends
Reducer<Text, IntWritable, Text, IntWritable> {
IntWritable countvalue = new IntWritable(1);
@Override
// map类的map方法的数据输入到reduce类的group方法中,得到<text,it(1,1)>,再将这个数据输入到reduce方法中
protected void reduce(Text inputkey, Iterable<IntWritable> inputvalue,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable i : inputvalue) {
System.out.println(i.get());
sum = sum + i.get();
}
// System.out.println("key: "+inputkey + "...."+sum);
countvalue.set(sum);
context.write(inputkey, countvalue);
}
}
// 3运行类,run方法,在测试的时候使用main函数,调用这个类的run方法来运行
/**
* param args 参数是接受main方得到的参数,在run中使用
*/
public int run(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(this.getConf(), "four_column");
// set mainclass
job.setJarByClass(four_column.class);
// set mapper
job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
// set reducer
job.setReducerClass(MyReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// set path
Path inpath = new Path(args[0]);
FileInputFormat.setInputPaths(job, inpath);
Path outpath = new Path(args[1]);
FileOutputFormat.setOutputPath(job, outpath);
FileSystem fs = FileSystem.get(conf);
// 存在路径就删除
if (fs.exists(outpath)) {
fs.delete(outpath, true);
}
job.setNumReduceTasks(1);
boolean status = job.waitForCompletion(true);
if (!status) {
System.err.println("the job is error!!");
}
return status ? 0 : 1;
}
public static void main(String[] args) throws IOException,
ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
int atatus;
try {
atatus = ToolRunner.run(conf, new four_column(), args);
System.exit(atatus);
} catch (Exception e) {
e.printStackTrace();
}
}
}
问题内容: 我有一个带有大量行的表。一列包含格式为’%m /%d /%Y’的日期,我想将它们全部更改为格式’%Y-%m-%d’ 通常:更新表设置mydate =‘6’ 我猜是行不通的,因为日期总是在变化。在这种情况下,我该怎么办? 问题答案: 如果日期字符串中的字段正确地用零填充,则可以将它们提取为子字符串:
本文向大家介绍python 统计一个列表当中的每一个元素出现了多少次的方法,包括了python 统计一个列表当中的每一个元素出现了多少次的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 运行结果: 以上这篇python 统计一个列表当中的每一个元素出现了多少次的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我在jmeter中有一个测试计划,只有很少的SOAP采样器,我在那里追加请求体计数器值,我正在寻找如何在每个采样器请求之前增加计数器值的方法。 在下面的设置中,jmeter按以下顺序执行请求: 我想实现这样的行为: 计数器起始值:1增量:1最大值:2 我该怎么做呢?我想我应该引入循环控制器?
本文向大家介绍Python统计日志中每个IP出现次数的方法,包括了Python统计日志中每个IP出现次数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python统计日志中每个IP出现次数的方法。分享给大家供大家参考。具体如下: 这脚本可用于多种日志类型,本人测试MDaemon的all日志文件大小1.23G左右,分析用时2~3分钟 代码很简单,很适合运维人员,有不足的地方请大家指出
问题内容: 给定一个包含重复项的整数排序数组。查找数组中存在的每个唯一元素的频率。 频率定义为数组中任何元素出现的次数。 例如 : 问题答案: 我们首先讨论divide and conquer解决这个问题的基本策略。 每次调用我们的函数时,我们将数组分成两半,每次将我们的问题分成两半,导致最坏的时间复杂度为O(log(n))。 我们的数组实际上并没有被分成两半,但是我们保留了两个指针 start
问题内容: 我编写了以下代码段来计算每个元素的出现次数。有可能以更短的方式实现这一目标吗? 另外,我只想显示出现1次以上的元素。所以我尝试如下修改,这导致了错误。 正确的方法是什么? 问题答案: 对于后一个问题,您必须进行更改 至 对于第一部分,尚不清楚为什么需要第一条管道,然后需要第二条管道。如果目的是将转换为,请使用: 正如Dici所建议的,您还可以将Collectors链接起来,将每个数字与