我了解我们必须使用:

job.setMapperClass()
job.setReducerClass()
job.setMapOutputKeyClass()
job.setMapOutputValueClass()
job.setOuputKeyClass()
job.setOutputKeyValueClass()

以避免Java泛型中的类型擦除问题。但是我多次看到人们没有使用所有这些方法。有些跳过setOuputKey/ValueClass(),有些跳过setOutputKey/ValueClass

这是为什么?我们是否不必总是设置所有这些方法?

最佳答案

如果您的 map 类和化简类输出相同的键/值类型,则只需设置OutputKeyClass和OutputValueClass(除非明确设置,否则MapOutputKeyClass和MapOutputValueClass假定与化简器相同)。

如果您未设置Mapper或Reducer类,那么hadoop会假定默认设置是使用所谓的identify映射器或reducer-输出它们接收的每个输入K,V对(如果是,则输出特定键的所有值)。 reducer )。

关于java - Hadoop中的I/O设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20143010/

10-12 23:01
查看更多