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. java 线程 join(wait) 后,是如何唤醒

    概要:锁是线程,锁对象执行完毕后,会调用自身对象上的notify(); Join 方法:本质上还是根据wait方法实现的.分析join源码发现join方法本身是使用了synchronized修饰符的. ...

  2. shell 灵活设置定时任务

    #!/bin/bash step=30 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do curl #调用链接 sleep $step ...

  3. PCIe 调试

    ISE 生成PCIe核之后, 在ipcore_dir目录下会产生以下文件目录 目录下包含内容如下: The doc folder contains the PCIe Endpoint Block da ...

  4. 【EOJ3652】乘法还原(二分图)

    题意: 思路:Orz Claris 先找出所有平方项,将与有平方项的数有关的数对暂时忽略,剩下的直接连边就是一张二分图,暴力DFS染色 将有平方项的数两边都加一个,再判字典序即可 我不会判字典序……耽 ...

  5. #error#storyboard#xib#解决方案

      https://www.evernote.com/shard/s227/sh/cad7d5f5-8e81-4b3b-908f-5d8eee7d11e2/928786149cf9a103a74626 ...

  6. 【洛谷 P3842】[TJOI2007]线段(DP)

    裸DP.感觉楼下的好复杂,我来补充一个易懂的题解. f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数. 那么转移就很简单了,走完当前行且停到左端点 ...

  7. c 語言 控制碼

    source code #include <stdio.h> int main() { char *test = "ABC\x41\n"; printf("s ...

  8. IC卡的传输协议(2)-块传输协议T=1【转】

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_172024.HTM 2.4 块传输协议T=1 T=1协议中,在TAL和IC卡之间传送的命令.R-APDU和传输控制信息 ...

  9. swap增加

    #创建17G的文件dd if=/dev/zero of=/data/swap/swap-1 bs=1024 count=16255000#设置为swap分区/sbin/mkswap /data/swa ...

  10. golang进行加密

    crc64加密 package main import ( "fmt" "hash/crc64" ) func main(){ s:="打死udhan ...