Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将历元转换为日期和时间-HADOOP_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 将历元转换为日期和时间-HADOOP

Java 将历元转换为日期和时间-HADOOP,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在努力学习hadoop(mapreduce)。我有一个mapper方法,其中我使用Date类来解析;时代;数据集中以毫秒表示的字段。数据集由2015年5月25日至2015年8月10日之间的历元组成 我想将历元转换为日期/时间,但只返回2015年6月5日至2015年6月15日之间历元的日期/时间 以下是我迄今为止所取得的成就。下面的代码生成以下内容: 输出: 2015年5月25日 2015年6月25日 等 期望输出 2015年6月5日// 2015年6月6日53 2015年6月7日41 等 制

我正在努力学习hadoop(mapreduce)。我有一个mapper方法,其中我使用Date类来解析;时代;数据集中以毫秒表示的字段。数据集由2015年5月25日至2015年8月10日之间的历元组成

我想将历元转换为日期/时间,但只返回2015年6月5日至2015年6月15日之间历元的日期/时间

以下是我迄今为止所取得的成就。下面的代码生成以下内容:

输出:

2015年5月25日

2015年6月25日

期望输出

2015年6月5日//

2015年6月6日53

2015年6月7日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);
}

    }
}
公共类映射器扩展映射器{
私有文本数据=新文本();
私有IntWritable one=新的IntWritable(1);
串时间;
公共void映射(对象键、文本值、上下文上下文)引发IOException、InterruptedException{
String[]userinput=value.toString().split(;);
试试{
LocalDateTime epoch=LocalDateTime.ofepochs秒(Long.parseLong(userinput[0])/1000,0,ZoneOffset.UTC);
DateTimeFormatter f=模式的DateTimeFormatter.of(“dd.MM.yyyy”);
时间=历元格式(f);
数据集(时间);
写(数据,一个);
}
捕获(例外e){
System.out.println(“错误:+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);

}
公共类reducer扩展reducer{
私有IntWritable one=新的IntWritable();
公共void reduce(文本键、Iterable值、上下文)
抛出IOException、InterruptedException{
整数和=0;
for(可写入值:值){
sum+=value.get();
}
一、集合(总和);
上下文。写(键,一);
}

}

所以您只关心这个括号内的数据<代码>2015年5月25日[2015年6月5日…2015年6月15日]2015年8月10日

如果这就是您所需要的,那么它就像
If
语句一样简单

我对Java8不太熟悉,但请检查一下

公共类映射器扩展映射器{
私有文本数据=新文本();
私有静态最终IntWritable ONE=新的IntWritable(1);
私有静态最终DateTimeFormatter FMT=模式的DateTimeFormatter.of(“dd.MM.yyyy”);
串时间;
//界定边界
私有LocalDateTime start=LocalDateTime.parse(“2015.06.05”,FMT);
私有LocalDateTime end=LocalDateTime.parse(“2015.06.15”,FMT);
@凌驾
公共void映射(对象键、文本值、上下文上下文)引发IOException、InterruptedException{
String[]userinput=value.toString().split(;);
试一试{
Long ms=Long.parseLong(userinput[0])/1000;
LocalDateTime inputEpoch=LocalDateTime.ofepochs秒(毫秒,0,ZoneOffset.UTC);
//过滤你的数据
if(inputeoch.isAfter(开始)和&inputeoch.isBefore(结束)){
数据集(inputEpoch.format(FMT));
写(数据,一个);
}
}捕获(…){}
}
}

Hi,代码只是我的mapper类的一个片段。我有一个映射器,一个减速器和一个驱动程序类。你能告诉我使用哪种日期模式吗?很多人感谢我,我关于Hadoop的观点仍然是正确的。编写一个单元测试或常规Java程序来识别日期范围,然后将条件放入映射器中,以提取您关心的日期范围子集。我说得对,我有日期格式的句点。我已更新了我的代码。请参阅更新的代码段。如何访问日期范围?你能给我提供一个如何获取日期范围的例子吗?将你的输入解析为毫秒历元,然后它就像
if(startDate)一样简单,我修改了我的类并应用了你的建议,但我得到了两个错误。方法ChronoLocalDateTime.isAfter(ChronoLocalDateTime)不适用,if(inputEpoch.isAfter(start)&&inputEpoch.isBefore(end)){[javac]^[javac]方法ChronoLocalDateTime.isBefore(ChronoLocalDateTime)不适用。(参数不匹配;LocalDate无法转换为ChronoLocalDateTime)需要
LocalDateTime
。请重试。
public class mapper extends Mapper<Object, Text, Text, IntWritable> { 
   private Text data = new Text();
   private static final IntWritable ONE = new IntWritable(1);
   private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("dd.MM.yyyy");
   String time;

   // Define the boundaries
   private LocalDateTime start = LocalDateTime.parse("2015.06.05", FMT);
   private LocalDateTime end = LocalDateTime.parse("2015.06.15", FMT);

   @Override
   public void map(Object key, Text value, Context context) throws IOException,      InterruptedException {

       String[] userinput = value.toString().split(";");
       try {
           Long ms = Long.parseLong(userinput[0])/1000;    
           LocalDateTime inputEpoch = LocalDateTime.ofEpochSecond(ms, 0, ZoneOffset.UTC);

           // Filter your data
           if (inputEpoch.isAfter(start) && inputEpoch.isBefore(end)) {
               data.set(inputEpoch.format(FMT));
               context.write(data,ONE);
           }
       } catch (...) { }
   }
}