在hadoop中序列化数组

问题描述 投票:0回答:1

我想序列化一个字符串数组“text Data”并将其从mapper发送到reducer

  public void map(LongWritable key, Text value, OutputCollector< IntWritable,Text > 
                 output, Reporter reporter) throws IOException {

                  Path pt=new Path("E:\\spambase.txt");
                 FileSystem fs = FileSystem.get(new Configuration());
                BufferedReader textReader=new BufferedReader(new InputStreamReader(fs.open(pt)));


             int numberOfLines =  readLines( );
             String[ ] textData = new String[numberOfLines];
                 int i;
                 for (i=0; i < numberOfLines; i++) {
                 textData[ i ] = textReader.readLine();
                 }
                 textReader.close();
java arrays hadoop serialization mapreduce
1个回答
0
投票

您似乎对MapReduce过程的工作方式存在一些误解。

理想情况下,映射器本身不应读取整个文件。

Job对象为给定的输入路径生成InputSplits的集合。 默认情况下,Hadoop会读取路径中每个拆分的一行(输入可以是目录),也可以只读取给定文件的一行。 每行一次传递到地图类的Text value,输入的LongWritable key偏移量。

它不清楚你想要输出什么,但你正在寻找ArrayWritable类,你使用output.collect()序列化数据到reducer。但是,您需要从IntWritable, Text修改映射器输出类型以使用output.collect(some_key, new ArrayWritable(textData))

值得指出的是,你使用的是被弃用的mapred库,而不是mapreduce库。并且E:\\不是hdfs路径,而是本地文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.