hadoop中的java序列化数组

yr9zkbsy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(383)

我想序列化一个stringarray“textdata”并将其从Map器发送到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();
ui7jx7zq

ui7jx7zq1#

您似乎对mapreduce进程的工作原理有一些误解。
理想情况下,Map程序不应该读取自身中的整个文件。
作业对象为给定的输入路径生成InputSplit集合。
默认情况下,hadoop读取路径中每个分割的一行(输入可以是一个目录),或者只读取给定文件的一行。
每行一次传递一个到 Text value 你的Map课 LongWritable key 输入的偏移量。
它不清楚你想要输出什么,但是你在寻找 ArrayWritable 类并使用 output.collect() . 但是,您需要从中修改Map器输出类型 IntWritable, Text 使用 output.collect(some_key, new ArrayWritable(textData)) 值得指出的是,您使用的是不推荐的 mapred 图书馆,而不是 mapreduce 一个。然后呢 E:\\ 不是hdfs路径,而是本地文件系统。

相关问题