У меня есть следующий алгоритм сортировки данных с помощью алфавитного порядкаСортировка данных Hadoop MapReduce
public void setup(Context context) throws IOException,
InterruptedException {
conf = context.getConfiguration();
caseSensitive = conf.getBoolean("amasort.case.sensitive", true);
}
@Override
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
String line = (caseSensitive) ? value.toString() : value.toString().toLowerCase();
word.set(line+"_"+key.toString());
context.write(word, one);
System.out.println("key:"+key.toString()+";value:"+value.toString());
}
}
public static class ForwardReducer
extends Reducer<Text,NullWritable,Text,NullWritable> {
private NullWritable result = NullWritable.get();
public void reduce(Text key, Iterable<NullWritable> values,
Context context
) throws IOException, InterruptedException {
String originalWord = key.toString();
originalWord = originalWord.substring(0, originalWord.lastIndexOf("_"));
key.set(originalWord);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
String[] remainingArgs = optionParser.getRemainingArgs();
Job job = Job.getInstance(conf, "word sort");
job.setJarByClass(AmaSort.class);
job.setMapperClass(LineMapper.class);
// job.setCombinerClass(ForwardReducer.class);
job.setReducerClass(ForwardReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
FileInputFormat.addInputPath(job, new Path(remainingArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(remainingArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
я попробовал этот алгоритм сортировки MyData набор, который содержит (@xxxxxxx, 0, ТСР, хх, 1,1,1 , 2,4,5, ....), но вывод всех строк начинается с @, и структура строки данных 0, tcp, x1x1,1,114, .... изменены, я просто хочу сортировать свой набор данных с этим специфический символ (@). Все линии начинаются с @ в первом файле, а остальные остаются той же структурой. Кто-нибудь может мне помочь, чтобы изменить этот алгоритм?
Спасибо @prashant он работал, но есть много данных delted (мой оригинальный размер набора данных 36MB упорядоченные данные только 3.6MB) и я получил данные в 1-м файле 0, tcp, xxxxx.0,1,111, затем атрибут «At» .... и последние данные «At» Я хочу в этом порядке «At'attribute», затем одна строка «At» date, наконец, остальная данных Не могли бы вы помочь мне, пожалуйста, решить это? или если вы хотите отправить мне свой адрес электронной почты, чтобы связаться друг с другом – BigBosss
Поскольку мы выполняем сортировку с использованием ключей, по умолчанию он будет сортировать ключ с помощью 'RowComparator', но если вы хотите отсортировать их с помощью своего пользовательского сортировки, вы можете реализовать свои собственные 'SortComparator', пожалуйста, посмотрите ссылку http://stackoverflow.com/questions/16184745/what-is-difference-between-sort-comparator-and-group-comparator-in-hadoop, кстати, вы можете связаться со мной на [email protected] –
Можете ли вы также привести пример строк, которые удалены из исходных данных? и размер может быть уменьшен, поскольку дубликаты удаляются из данных. –