2016-06-12 2 views
0

В настоящее время я использую hadoop для обработки задачи подсчета для большого набора данных (около 3 концертов). Мне нужно подсчитать что-то, что заполняется в том же временном интервале. Например: подсчет числа записи с метками времени между 3 и 4 часами. Мне нужно, чтобы выход был непрерывным. Если в определенном временном интервале нет записи, я все равно хочу сохранить ее на выходе, например [3 am~4am, 0 records].Выполнение чего-либо перед запуском задачи карты

Для этого я придумал идею, что я могу поместить все временные интервалы со значениями 0 в вывод отображения, прежде чем начнется задача карты. Но я попробовал Google, и я не мог найти решения.

Итак, можно ли каким-либо образом передать что-либо перед запуском задачи карты? Я также буду признателен за любые новые идеи для достижения этой цели. Thanks

+0

добавить входную выборку данных, которые вы и вы хотите вывести? – syadav

+0

для ввода как: {[10 утра], [2 вечера, 2]}, а для вывода я хочу, например, такие, как {[10 утра], [11 утра0,0], [12 утра], [1 вечера, , [2 pm,2] ...} –

ответ

0

Решение состоит в том, чтобы сделать это одновременно с вашей задачей подсчета, чтобы сэкономить время.

Давайте предположим, что у вас есть как следующий файл/таблицы

ценность продукта дата время
2016, 14:00, Samsung, 100
2016, 15:30, LG, 130
2016, 15 : 59, Nexus, 50
2016, 18:10, LG, 15

и вы хотите сгруппировать по видам продукции и выяснить, в общей сложности для каждого продукта, но в то же время вы хотите подсчитать количество записей, которые имеют метки времени между 3 утром и 4 утром

Просто определить свой собственный ключ вы Mapper класса и отправить его в контекст, зависит от вашего состояния

public class Mapper_WordsCount extends Mapper<LongWritable, Text, Text, IntWritable> { 

    private final static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 

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


     String line = value.toString(); 
     String[] items = line.split(",") 


     //define a custom key 
     String myCustomKey = "3am-4am"; 

     //put 0 by default. Only if you want to have result like: [3am-4am, 0 records] 
     context.write(new Text(myCustomKey),IntWritable(0)); 

     // check you condition 
     if (isBetween_3am_and_4am(items[1])) { // write your function 
      //count the record like you want 
      context.write(new Text(myCustomKey),one); 
     } 

     ...... 
     your java code 
     ...... 

    } 
} 
+0

проверить вход/выход, который я только что разместил, я не думаю, что ваше решение работает для меня –

Смежные вопросы