将输入arff文件拆分为较小的块以处理非常大的数据集

时间:2015-05-06 15:07:05

标签: java hadoop mapreduce weka

我试图在地图上运行weka分类器减少并加载甚至200mb的整个arff文件导致堆空间错误,所以我想将arff文件拆分成块,但问题是它必须维护块信息,即每个块中的arff属性信息,以便在每个映射器中运行分类器。这是我试图分割数据但不能提高效率的代码,

  List  splits = new ArrayList ();
        for(FileStatus file:listStatus(job)){
            Path path = file.getPath();
            FileSystem fs = path.getFileSystem(job.getConfiguration());

            //此文件中的字节数
            long length = file.getLen();
            BlockLocation [] blkLocations = fs.getFileBlockLocations(file,0,length);

            //确保这实际上是一个有效的文件
            if(length!= 0){
                //设置要进行的拆分数。注意:该值可以更改为任何值
                int count = job.getConfiguration()。getInt(“Run-num.splits”,1);
                for(int t = 0; t  

1 个答案:

答案 0 :(得分:0)

你先试过这个吗?

在mapred-site.xml中,添加以下属性:

<property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx2048m</value>
</property>

// MR作业的内存分配