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



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

要将 80% 和 20% 转换为 2 个单独的文件,我们需要知道数据集中确切的记录数。只有当我们浏览一次数据集时,才知道。所以我们需要编写 1 个 MapReduce 作业来计算记录数和 2 个 MapReduce 作业,用于使用多个输入将 80% 和 20% 分成 2 个文件。

我是否在正确的轨道上,或者有任何替代方案。

但又是一个小小的困惑,如何检查减速器是否充满了 80% 的数据

我建议您使用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();
    }
}

相关内容

  • 没有找到相关文章

最新更新