1)上代码:

 /**
* Created with IntelliJ IDEA.
* User: hadoop
* Date: 16-1-20
* Time: 下午7:30
* To change this template use File | Settings | File Templates.
*/
import org.apache.hadoop.io.*;
import java.util.*;
public class DoubleWritableArray {
public static class DoubleArray extends ArrayWritable{
public DoubleArray(){
super(DoubleWritable.class);
}
// public DoubleWritable[] get(){return values;} public static double[] convert2double(DoubleWritable[] w){
double[] value=new double[w.length];
for (int i = 0; i < value.length; i++) {
value[i]=Double.valueOf(w[i].get());
}
return value;
} } public static void main(String[]args){ ArrayWritable aw=new ArrayWritable(DoubleWritable.class);
aw.set(new DoubleWritable[] {new DoubleWritable(4.34),new DoubleWritable(6.56),
new DoubleWritable(9.56)}); DoubleWritable[] values=(DoubleWritable[])aw.get();
for(DoubleWritable val1:values){
System.out.println(val1);
}
//与ArrayWritable相比,新定义的DoubleArray只是在调用构造函数的时候少写了DoubleWritable类而已
DoubleArray d=new DoubleArray();
d.set(new DoubleWritable[] {new DoubleWritable(4.34),new DoubleWritable(6.56),
new DoubleWritable(9.56)}); double[] temp=DoubleArray.convert2double((DoubleWritable[])d.get()) ;
for (double val:temp)
System.out.println(val); } }

ArrayWritable作为reduce的输入的话,需要创建其子类,在子类中创建一个无参构造函数。

来源:http://grepcode.com/file/repo1.maven.org/maven2/org.jvnet.hudson.hadoop/hadoop-core/0.19.1-hudson-2/org/apache/hadoop/io/ArrayWritable.java#ArrayWritable.toArray%28%29

2)读取txt文件并将其以<long,DoubleArray>作为键值对的形式写入SequenceFile

 package convert;

 /**
* Created with IntelliJ IDEA.
* User: hadoop
* Date: 16-1-19
* Time: 下午3:09
* To change this template use File | Settings | File Templates.
*/
import java.io.IOException;
import java.net.URI; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator; //import Jama.Matrix.*;
//import java.io.IOException;
import java.io.File; //import javax.sound.midi.SysexMessage;
public class SequenceFileWriteDemo {
public static void main(String[] args) throws IOException {
String uri ="/home/hadoop/srcData/bDoubleArraySeq";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
Path path = new Path(uri);
LongWritable key = new LongWritable();
DoubleArrayWritable value = new DoubleArrayWritable();
SequenceFile.Writer writer = null;
try {
writer = SequenceFile.createWriter(fs, conf, path, key.getClass(),
value.getClass()); final LineIterator it2 = FileUtils.lineIterator(new File("/home/hadoop/srcData/transB.txt"), "UTF-8");
try {
int i=0;
String[] strings;
DoubleWritable[] ArrayDoubleWritables;
while (it2.hasNext()) {
++i;
final String line = it2.nextLine();
key.set(i);
strings=line.split("\t");
ArrayDoubleWritables=new DoubleWritable[strings.length];
for (int j = 0; j < ArrayDoubleWritables.length; j++) {
ArrayDoubleWritables[j] =new DoubleWritable(Double.valueOf(strings[j])); } value.set(ArrayDoubleWritables);
writer.append(key,value);
//System.out.println("ffd"); }
} finally {
it2.close();
} }finally {
IOUtils.closeStream(writer);
}
System.out.println("ok"); } }

定义DoubleArray并将其作为value写入SequenceFile的更多相关文章

  1. 自定义数据类型写入SequenceFile并读出

    开头对这边博客的内容做个概述,首先是定义了一个DoubleArrayWritable的类,用于存放矩阵的列向量,然后将其作为value写入SequenceFile中,key就是对应的矩阵的列号,最后( ...

  2. 视频文件写入转换之图像处理-OpenCV应用学习笔记五

    在<笔记二>中我们做了视频播放和控制的实现,仅仅算是完成了对视频文件的读取操作:今天我们来一起练习下对视频文件的写入操作:格式转换. 实现功能: 打开一个视频文件play.avi,读取文件 ...

  3. ClickHouse数据库数据定义手记之数据类型

    前提 前边一篇文章详细分析了如何在Windows10系统下搭建ClickHouse的开发环境,接着需要详细学习一下此数据库的数据定义,包括数据类型.DDL和DML.ClickHouse作为一款完备的D ...

  4. 初识python: xlsxwriter 将数据写入Excel

    使用 xlsxwriter 模块将数据写入excel . #!/user/bin env python # author:Simple-Sir # time:2020/9/24 12:51 # 使用 ...

  5. Linux shell 脚本中使用 alias 定义的别名

    https://www.cnblogs.com/chenjo/p/11145021.html 核心知识点: 用 shopt 开启和关闭 alias 扩展 交互模式下alias 扩展默认是开启的,脚本模 ...

  6. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  7. windows7命令帮助大全

    有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...

  8. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

  9. Android中基于CGroup的memory子系统HAL层分析-lmkd

    Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属 ...

随机推荐

  1. js中连写两个?:三元运算符语法解释

    在angular 源码中有连写两个三元运算符的代码: var hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() :$loc ...

  2. pip 使用国内源

    常用国内的pip源如下:阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple ...

  3. fieldset——一个不常用的HTML标签

    fieldset 标签 -- 对表单进行分组 在form表单中,我们可以对form中的信息进行分组归类,如注册表单的form,我们可以将注册信息分组成 基本信息(一般为必填) 详细信息(一般为可选) ...

  4. CSS3学习笔记之立体线框球形动画

    效果截图: HTML代码: <div class="ball-box"> <div class="ball"> <div clas ...

  5. oracle11g 使用数据泵导出导入数据

    终于搞定了 快写个笔记 记录下. 删除用户的时候提示已经登录了不能删除,这个需要把登录的session结束掉. select username,sid,serial# from v$session w ...

  6. codechef T6 Pishty and tree dfs序+线段树

    PSHTTR: Pishty 和城堡题目描述 Pishty 是生活在胡斯特市的一个小男孩.胡斯特是胡克兰境内的一个古城,以其中世纪风格 的古堡和非常聪明的熊闻名全国. 胡斯特的镇城之宝是就是这么一座古 ...

  7. 计算n阶行列式的模板

    之前在学习计数问题的时候也在网上找了很多关于行列式的资料 但是发现很多地方都只介绍2\3阶的情况 一些论文介绍的方法又看不懂 然后就一直耽搁着 今天恰好出到这样的题目 发现标算的代码简介明了 还挺开心 ...

  8. Mysql TEXT类型长度

    BLOBTEXT一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符. MEDIUMBLOBMEDIUMTEXT一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字 ...

  9. bugscan泄露代码解密

    #{文件名:decode key} dekey_dict= {'expback_64pyc_dis.py': 'ef632082c7620cf54876da74a1660bfb9c06eb94549b ...

  10. 【JAVA】Eclipse中使用git进行pull远程代码

    当使用eclipse或者MyEclipse进行pull远程代码的时候,或者github的代码的时候报如下错误代码: 代表我们没有配置我们的Git地址,这里我教大家配置一下.首先下面是错误代码: The ...