将文件分为80%和20%的更好方法,用于在mapreduce中构建模型和预测

envsm3lx  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我试图将我的hdfs文件分为两部分/文件80%和20%用于分类算法(80%用于建模,20%用于预测),请提供相同的建议。
要将80%和20%的数据分为两个独立的文件,我们需要知道数据集中记录的确切数目,并且只有通过一次数据集才能知道。因此,我们需要编写一个mapreduce作业来计算记录数,编写第二个mapreduce作业来使用多个输入将80%和20%分隔成两个文件。
我是在正确的轨道上,还是有其他选择。
但是,如何检查减速机是否充满了80%的数据,这又是一个小小的困惑。

eulz3vhy

eulz3vhy1#

我建议你用 Random 用于拆分数据集和 MultipleOutputs 将数据写入不同的路径。只需一个Map作业即可完成。下面是一个可以使用的Map器示例:

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();
    }
}

相关问题