zoukankan      html  css  js  c++  java
  • Linux 上运行 mapreduce 类型错误

    1.ClassCastException

    错误代码

    /**
     * 
     */
    /**
     * @author hadoop
     *
     */
    package WordCount;
    
    import java.io.IOException;
    import java.util.Iterator;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    
    /**
     * KEYIN :是map task读取到的数据的key的类型,是一行的起始偏移量Long
     * VALUEIN:是map task读取到的数据的value的类型,是一行的内容String
     * 
     * KEYOUT:是用户的自定义map方法要返回的结果kv数据的key的类型,在wordcount逻辑中,我们需要返回的是单词String
     * VALUEOUT:是用户的自定义map方法要返回的结果kv数据的value的类型,在wordcount逻辑中,我们需要返回的是整数Integer
     * 
     * 
     * 但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程中传输效率低下
     * 所以,hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口
     * 
     * hadoop为jdk中的常用基本类型Long String Integer Float等数据类型封住了自己的实现了hadoop序列化接口的类型:LongWritable,Text,IntWritable,FloatWritable
     * 
     * 
     * 
     *  
     *
     */
    public class WordCountMapper extends
            Mapper<IntWritable, Text, Text, IntWritable> { 
        @Override
        protected void map(IntWritable index, Text line,
                org.apache.hadoop.mapreduce.Mapper.Context context)
                throws IOException, InterruptedException {
            String str = line.toString();
            String[] strList = str.split(" ");
            for (String word : strList) {
                context.write(new Text(word), new IntWritable(1));
            } 
        }
    
    }

    正确代码

    将第一个泛型修改成LongWritable

    /**
     * 
     */
    /**
     * @author hadoop
     *
     */
    package WordCount;
    
    import java.io.IOException;
    import java.util.Iterator;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    
    /**
     * KEYIN :是map task读取到的数据的key的类型,是一行的起始偏移量Long
     * VALUEIN:是map task读取到的数据的value的类型,是一行的内容String
     * 
     * KEYOUT:是用户的自定义map方法要返回的结果kv数据的key的类型,在wordcount逻辑中,我们需要返回的是单词String
     * VALUEOUT:是用户的自定义map方法要返回的结果kv数据的value的类型,在wordcount逻辑中,我们需要返回的是整数Integer
     * 
     * 
     * 但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程中传输效率低下
     * 所以,hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口
     * 
     * hadoop为jdk中的常用基本类型Long String Integer Float等数据类型封住了自己的实现了hadoop序列化接口的类型:LongWritable,Text,IntWritable,FloatWritable
     * 
     * 
     * 
     *  
     *
     */
    public class WordCountMapper extends
            Mapper<LongWritable, Text, Text, IntWritable> { 
        @Override
        protected void map(LongWritable index, Text line,
                org.apache.hadoop.mapreduce.Mapper.Context context)
                throws IOException, InterruptedException {
            String str = line.toString();
            String[] strList = str.split(" ");
            for (String word : strList) {
                context.write(new Text(word), new IntWritable(1));
            } 
        }
    
    }
  • 相关阅读:
    Silverlight与WPF开发人员入门应该知道的十件事
    Silverlight4.0教程之使用鼠标右键事件和滚轮事件
    Silverlight实用窍门系列:4.Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出。【附带源码实例】
    将moss 2007的模板文件导入到moss 2010
    Silverlight4.0教程之打印报表和图形
    .NET MessageBox 网页弹出消息框
    使用sharepoint自带的文本编辑器1
    C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录
    推荐一个非常好的在线免费的 Photoshop
    Silverlight游戏设计(Game Design):目录
  • 原文地址:https://www.cnblogs.com/liuyongpingblog/p/9985857.html
Copyright © 2011-2022 走看看