我正在努力学习hadoop(mapreduce)。我有一个mapper方法,其中我使用date类来解析;时间;数据集中以毫秒表示的字段。数据集由2015年5月25日至2015年8月10日之间的历元组成。
我想将epoch转换为日期/时间,但只返回从2015年6月5日到2015年6月15日之间的epoch的日期/时间。
以下是我迄今所取得的成就。下面的代码生成以下内容:
输出:
25.05.2015
25.06.2015
等
期望输出
2015年6月5日5//
06.06.2015 53
07.06.2015 41
等
制图器
public class mapper extends Mapper<Object, Text, Text, IntWritable> {
private Text data = new Text();
private IntWritable one = new IntWritable(1);
String time;
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String[] userinput = value.toString().split(";");
try{
LocalDateTime epoch = LocalDateTime.ofEpochSecond(Long.parseLong(userinput[0])/1000, 0, ZoneOffset.UTC);
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd.MM.yyyy");
time = epoch.format(f);
data.set(time);
context.write(data,one);
}
catch(Exception e){
System.out.println("Error: " + e);
}
}
}
减速机
public class reducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable one = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable value : values) {
sum+=value.get();
}
one.set(sum);
context.write(key, one);
}
}
1条答案
按热度按时间brccelvz1#
所以你只关心括号里的数据。。。
25.05.2015 [05.06.2015 ... 15.06.2015] 10.08.2015
如果你只需要这些,那就简单到if
声明。我对Java8不太熟悉,但请检查一下java:如何检查日期是否在某个范围内?