记一次深刻的教训-----将mat数据转化为SequenceFile

深刻的体会就是,“java.lang..”就是空指针异常可能是由于数组部分元素未被初始化引起的 。
1)使用将mat数据转化为形式的数据,代码如下:
1 /** 2* Created with IntelliJ IDEA. 3* User: hadoop 4* Date: 16-3-6 5* Time: 上午10:56 6* To change this template use File | Settings | File Templates. 7*/ 8 import com.jmatio.io.MatFileReader; 9 import com.jmatio.types.*;10 import java.io.IOException;11 import org.apache.hadoop.conf.Configuration;12 import org.apache.hadoop.fs.FileSystem;13 import org.apache.hadoop.fs.Path;14 import org.apache.hadoop.io.*;15 import java.net.URI;16 import org.apache.hadoop.mapreduce.*;17 public class mat2Seq {18 public static void main(String[] args) throws IOException {19writeMat2Seq("data/100_100/F100.mat","SeqOutput/F");20writeMat2Seq("data/100_100/b100.mat","SeqOutput/b");21writeMat2Seq("data/100_100/d100.mat","SeqOutput/d");22writeMat2Seq("data/100_100/s100.mat","SeqOutput/s");23writeMat2Seq("data/100_100/u100.mat","SeqOutput/u");24 }25 26 public static void writeMat2Seq(String matPath,String SeqOutput) throws IOException {27MatFileReader reader=new MatFileReader(matPath);28MLArray mlArray=reader.getMLArray("a");29MLDouble doubleValue=http://www.kingceram.com/post/(MLDouble)mlArray;30double[][] matrix=doubleValue.getArray();31Configuration conf =new Configuration();32FileSystem fs=FileSystem.get(URI.create(SeqOutput),conf);33IntWritable key=new IntWritable();34DoubleArrayWritable value=new DoubleArrayWritable();35SequenceFile.Writer writer=null;36try {37writer=SequenceFile.createWriter(fs,conf,new Path(SeqOutput),key.getClass(),38value.getClass());39if (matPath.endsWith("F100.mat")){//左矩阵F依次将行存储到Seq40DoubleWritable[] rowVector=new DoubleWritable[matrix.length];41for (int i=0;i
以上使用的.mat文件,程序都可以好好的运行 。但是当把文件换成一个B1k2k,也就是一个1000*2000的矩阵文件时,就报空指针的异常,“java.lang.”,具体如下:

记一次深刻的教训-----将mat数据转化为SequenceFile

文章插图
提示是在.write()方法中出现空指针的异常,就开始怀疑是这个类没写好(也就是怀疑人家有bug,然后就下了.6.4,还是不行),然后一路追查,到最后的write()方法最终调用了.write(),然后就开始是open-jdk的不兼容了,然后就重装了sun JDK 。还是不行,然后就把java的io包里的.java源码拷贝到工程里,想着单步调试到.write(),看看究竟发生了什么,怎奈需要用到io包,我又不行重新编译,所以就想先把.mat转化为.txt文件,但是呢,没成功,因为虚拟机磁盘空间不够了,没法了,想想是不是机子环境的问题呢(哈哈哈,想象力太好),就传给谷总试试看能不能运行,谷总说你确定不是算法问题?答:不该呀 。呵呵呵,结果谷总发来了两张图片,如下:
记一次深刻的教训-----将mat数据转化为SequenceFile

文章插图