更好的方法是将文件拆分为80%和20%,以便在MapReduce中构建模型和预测

时间:2014-12-12 09:39:28

标签: hadoop mapreduce hdfs classification

我正在尝试将我的HDFS文件分成两部分/文件 80% 20%用于分类算法(80%用于建模,20%用于预测) 请提供同样的建议。

要将80%和20%分别用于2个单独的文件,我们需要知道数据集中的确切记录数。只知道我们是否经历过一次数据集。 所以我们需要编写 1 MapReduce Job来计算记录数和 2 和Mapreduce作业,使用多输入将80%和20%分成2个文件。

我是在正确的轨道上还是有任何替代方案。

但是再次出现了一个小小的混乱如何检查减速器是否充满了80%的数据

1 个答案:

答案 0 :(得分:1)

我建议您使用Random分割数据集,使用MultipleOutputs将数据写入单独的路径。只需一个仅限地图的作业即可完成。以下是您可以使用的映射器示例:

public class Splitter extends Mapper<LongWritable, Text, NullWritable, NullWritable> {
    MultipleOutputs mos;
    Random rnd = new Random();

    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        mos = new MultipleOutputs(context);
    }

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        if (rnd.nextDouble() < 0.8) {
            mos.write(key, value, "learning-set");
        } else {
            mos.write(key, value, "test-set");
        }
    }

    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {
        mos.close();
    }
}