Mij*_*vic 11 java hadoop mapreduce
如果这是一个愚蠢的问题,我很抱歉,但我找不到Google搜索的答案.我怎么能理解LongWritable类型?它是什么?任何人都可以链接到架构或其他有用的页面.
Gar*_*vis 19
Hadoop需要能够通过DataInput和DataOutput对象(通常是IO Streams)将数据输入和输出Java类型.Writable类通过实现两个方法`write(DataOuput)和readFields(DataInput)来实现这一点.
特别LongWritable是一个Writable包装java long的类.
大多数时候(特别是刚刚开始)你可以在精神上取代LongWritable- > Long即它只是一个数字.如果您要定义自己的数据类型,您将开始熟悉实现可写接口:
看起来有些像:
public interface Writable {
public void write(DataOutput out) throws IOException;
public void readFields(DataInput in) throws IOException;
}
Run Code Online (Sandbox Code Playgroud)
Mapper类是泛型类型,具有四个形式类型参数,这些参数指定映射函数的输入键,输入值,输出键和输出值类型。
public class MaxTemperatureMapper
extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
}
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException
{
}
}
Run Code Online (Sandbox Code Playgroud)
对于此代码示例,输入键是一个长整数偏移量,输入值是一行文本。输出键是整数,输出值是整数。Hadoop不使用内置的Java类型,而是提供了自己的一组基本类型,这些类型针对网络序列化进行了优化。这些可以在org.apache.hadoop.io包中找到。
在这里,我们使用LongWritable,它对应于Java Long,Text(例如Java String)和IntWritable(例如Java Integer)。