与えられたCSVファイルのレコード数をカウントするmapreduceコードを書きたいと思います。マップで何をするのか分からず、これを解決するにはどうすればいいですか?誰かが何かを提案できますか?レコードの数をカウントするためのMApreduceコードを書く
答えて
あなたのマッパーは固定値1(ワードカウントの例と同じです)の固定キーを発行する必要があります。
単純に還元剤としてLongSumReducerを使用してください。
ジョブの出力は、キー "count"を持つレコードで、値は探しているレコードの数です。
同じLongSumReducerをコンバイナとして使用することで、パフォーマンスを大幅に向上させることができます。
- あなたのマップは、各レコードの1を放出しなければならない、あなたのコンバイナは、それが(マップごとに小計)を得たすべて「1」の総和を放出しなければならない
- を読ん
- あなた減速は総計を放出しなければなりませんレコード数
job.getcounters()を使用して、ジョブの完了後にレコードごとに増えた値を取得します。 javaを使用してmapreduceジョブを作成する場合は、カウントメカニズムにenumを使用します。
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
public class LineCount
{
public static class Map extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable>
{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text("Total Lines");
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,Reporter reporter)
throws IOException
{
output.collect(word, one);
}
}
public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(LineCount.class);
conf.setJobName("LineCount");
conf.setNumReduceTasks(5);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
私はID MapperとID Reducerを使用しています。
これはMapper.classとReducer.classです。それからちょうど読むmap input records
これを得るために実際にコードを書く必要はありません。
希望している回答よりも優れた解決策があります。
各レコードに1を出力するのではなく、map()でカウンタをインクリメントし、cleanup()で各マップタスクの後にインクリメントしたカウンタを出力するだけです。
中間読み込み書き込みを減らすことができます。そして減速機は少数の値のリストだけを集める必要があります。
public class LineCntMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
Text keyEmit = new Text("Total Lines");
IntWritable valEmit = new IntWritable();
int partialSum = 0;
public void map(LongWritable key, Text value, Context context) {
partialSum++;
}
public void cleanup(Context context) {
valEmit.set(partialSum);
context.write(keyEmit, valEmit);
}
}
あなたは完全な作業コードあなたは正確にLongSumReducer何であるかを教えてくださいすることができ、あなたのanwerためhere
エレガントで効率的なソリューション。 – tlarchuk
- 1. Mapreduceで擬似コードを書くには?
- 2. 特定のセル範囲の一意のレコード数をカウントするためのExcel関数の書き方
- 3. mapreduceのカウントの差
- 4. javascriptコードを書くためのツール
- 5. MapReduceのカウント問題
- 6. MapReduce hadoopクラスタで.ds2スコアリングファイルを実行するためのコード
- 7. オラクル・カーソルのレコード数をカウントする
- 8. カウント(*)のためにhibernateでクエリを書く方法
- 9. 異なるレコードを選択するためのLinqクエリと異なるレコードのカウント数
- 10. レコードをフィルタリングするためのJQueryコード。最高のテクニック/コード
- 11. 1日あたりのレコード数をカウントするには?
- 12. リアルタイムでレコード数をカウントするFirebase
- 13. MapReduceコードのStringIndexOutOfBoundsException
- 14. Mapreduceコードを理解する
- 15. 時間ごとのレコード数をカウントし、合計レコード数が値よりも多くなった時間をカウントするSQL
- 16. 1回のクエリで複数のレコード数をカウントする
- 17. PyPyのJITの高速コードを書くためのガイドライン
- 18. .flaファイルを読むためのコードを書くには?
- 19. ユニットテストを書くためのコードのドキュメントで
- 20. R言語/ reporteRs複数の書類を書くためのループ
- 21. mapreduceを使用してCloudant内の特定のユーザーのために出席したイベントの数をカウントしてください
- 22. node.js-MySQLはレコード数をカウントします
- 23. T-SQLを使用した前回のレコード数のカウント
- 24. MapReduceのコード都市
- 25. XMLファイルを書くためのコードを生成する最良の方法
- 26. CakePHP 3.x mapReduceが複数のレコードを照会できない
- 27. WordpressプラグインのためにPHP内でJavaScriptコードを書く方法
- 28. 1行でこのRubyコードを書くために探し
- 29. ATI GPUコードを書くための言語とコンパイラは?
- 30. コードを書くためのよりエレガントな方法
感謝を見つけることができますし、それが通常の減速と異なっていますか? –
LongSumReducerは、必要なものを正確に実行する減速器の簡単な実装です。だから、自分で書く必要はありません。私は私の答えのドキュメントにURLを追加しました。 –
私はファイル名をキーにしたいのですが、どうすればいいですか? –