我了解我们必须使用:
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/