我正在尝试将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/