MapReduce中ArrayWritable 使用指南

在编写MapReduce程序时,Map和Reduce之间传递的数据需要是ArrayList类型的,在调试运行时遇到了这样的一个错误:

java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>()

经查询官网API文档后发现这样的一段话:

A Writable for arrays containing instances of a class. The elements of this writable must all be instances of the same class. If this writable will be the input for a Reducer, you will need to create a subclass that sets the value to be of the proper type. For example: public class IntArrayWritable extends ArrayWritable { public IntArrayWritable() { super(IntWritable.class); } }

原来是要自己实现一个ArrayWritable类的派生类,使用时只要实现两个构造函数即可

public static class TextArrayWritable extends ArrayWritable {
 public TextArrayWritable() {
 super(Text.class);
 }

 public TextArrayWritable(String[] strings) {
 super(Text.class);
 Text[] texts = new Text[strings.length];
 for (int i = 0; i < strings.length; i++) {
 texts[i] = new Text(strings[i]);
 }
 set(texts);
 }
}
(0)

相关推荐

  • MapReduce中ArrayWritable 使用指南

    在编写MapReduce程序时,Map和Reduce之间传递的数据需要是ArrayList类型的,在调试运行时遇到了这样的一个错误: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>() 经查询官网API文档后发现这样的一段话: A Writable for arrays containing instances of a class. T

  • hadoop map-reduce中的文件并发操作

    这样的操作在map端或者reduce端均可.下面以一个实际业务场景中的例子来简要说明. 问题简要描述: 假如reduce输入的key是Text(String),value是BytesWritable(byte[]),不同key的种类为100万个,value的大小平均为30k左右,每个key大概对应 100个value,要求对每一个key建立两个文件,一个用来不断添加value中的二进制数据,一个用来记录各个value在文件中的位置索引.(大量的小文件会影响HDFS的性能,所以最好对这些小文件进行

  • javascript中setTimeout使用指南

    javascript中setTimeout使用指南 <script> /* //方法1 function slows(){ alert("15S后弹出!"); } setTimeout("slows()",5000); //方法2 function slows(){ alert("15S后弹出!"); } setTimeout(slows,5000); */ //方法3 function slows(){ alert("15

  • PHP中cookies使用指南

    综述  Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie是由Web服务器保存在用户浏览器上的小文件,它可以包含有关用户的信息(如身份识别号码.密码.用户在Web站点购物的方式或用户访问该站点的次数).无论何时用户链接到服务器,Web站点都可以访问Cookie信息.  怎样设置cookies?  在PHP中可以使用setcookie函数设置一个cookie.cookie是 HTTP标头的一部分, 因此设置cookie功能必须在任何内容送到浏览器之前.这种

  • Android中viewPager使用指南

    viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用.  使用viewPager的步骤如下: (1)在布局中放入viewPager的控件  (2)设置加载到viewPager中的view  (3)编写viewPager特有的adapter  (4)实例化viewPager并给他绑定上步设置的adapter 这个步骤体现的也是MVC思想,可以参考我之前的文章http://www.jb51.net/article/78

  • php中curl使用指南

    许多同学在第一次使用curl的时候感觉一个头两个大(包括我在内),看着这一条条的curl_setopt函数完全摸不着头脑,不过在你花10分钟看了我的介绍后相信你以后也能轻松戏耍php的curl了 首先,请看一个curl代码(花10秒钟,略看一遍,然后跳到后文) 复制代码 代码如下: <?php $data = "<soap:Envelope>[...]</soap:Envelope>"; $tuCurl = curl_init(); curl_setopt

  • Unity中webgl使用避雷要素指南

    目录 1.不支持ios设备播放音频(无论是MP3还是ogg格式) 2.在ios设备的浏览器(无论是Safari 还是微信浏览器) 3.发布到webgl的时候注意所有Text都需要使用自定义的字体 4.若要更改loading界面 5.如果想做微信小程序可以通过laya进行后期制作 6.在本地iis服务器运行没有问题 7.在webgl中使用对象池模式可能会出现莫名其妙的状况 8.在webgl中调用接口动态生成元素还有个坑 1.不支持ios设备播放音频(无论是MP3还是ogg格式) 目前是通过unit

  • Java开发中的容器概念、分类与用法深入详解

    本文实例讲述了Java开发中的容器概念.分类与用法.分享给大家供大家参考,具体如下: 1.容器的概念 在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 2.容器与数组的关系 之所以需要容器: ① 数组的长度难以扩充 ② 数组中数据的类型必须相同 容器与数组的区别与联系: ① 容器不是数组,不能通过下标的方式访问容器中的元素 ② 数组的所有功能通过Arraylist容器都可以实现,只是实现的方式不

  • 在CentOS中搭建Hadoop的详细步骤

    搭建说明:第一次搭建 Hadoop 的小伙伴,请严格按照文章中的软件环境和步骤搭建,不一样的版本都可能会导致问题. 软件环境: 虚拟机:VMware Pro14 Linux:CentOS-6.4(下载地址,下载DVD版本即可) JDK:OpenJDK1.8.0 (强力建议不要使用 Oracle 公司的 Linux 版本的 JDK) Hadoop:2.6.5(下载地址) 虚拟机的安装和Linux系统的安装这里就省略了,可以参照网上的教程安装,一般没什么大问题,需要注意的是记住这里你输入的用户密码,

  • Java基础之MapReduce框架总结与扩展知识点

    一.MapTask工作机制 MapTask就是Map阶段的job,它的数量由切片决定 二.MapTask工作流程: 1.Read阶段:读取文件,此时进行对文件数据进行切片(InputFormat进行切片),通过切片,从而确定MapTask的数量,切片中包含数据和key(偏移量) 2.Map阶段:这个阶段是针对数据进行map方法的计算操作,通过该方法,可以对切片中的key和value进行处理 3.Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputColle

随机推荐