我试图将我的hdfs文件分为两部分/文件80%和20%用于分类算法(80%用于建模,20%用于预测),请提供相同的建议。要将80%和20%的数据分为两个独立的文件,我们需要知道数据集中记录的确切数目,并且只有通过一次数据集才能知道。因此,我们需要编写一个mapreduce作业来计算记录数,编写第二个mapreduce作业来使用多个输入将80%和20%分隔成两个文件。我是在正确的轨道上,还是有其他选择。但是,如何检查减速机是否充满了80%的数据,这又是一个小小的困惑。
eulz3vhy1#
我建议你用 Random 用于拆分数据集和 MultipleOutputs 将数据写入不同的路径。只需一个Map作业即可完成。下面是一个可以使用的Map器示例:
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(); } }
1条答案
按热度按时间eulz3vhy1#
我建议你用
Random
用于拆分数据集和MultipleOutputs
将数据写入不同的路径。只需一个Map作业即可完成。下面是一个可以使用的Map器示例: