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

为了将80%和20%的数据分成2个单独的文件,我们需要知道数据集中的确切记录数,并且只有知道我们一次访问数据集才知道。
因此我们需要编写 1 MapReduce Job来仅计算记录数和
2 nd使用多个输入将80%和20%分成2个文件的Mapreduce作业。

我是在正确的轨道上吗,还是有其他选择呢?

但是还是有点混乱,如何检查 reducer 是否填充了80%的数据

最佳答案

我建议您使用Random拆分数据集,并使用MultipleOutputs将数据写入单独的路径。只能执行一项仅 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();
    }
}

关于hadoop - 将文件拆分为80%和20%的更好方法,以在MapReduce中构建模型和进行预测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27440709/

10-12 19:55