在mapreduce中随机播放大数据文件

时间:2014-07-21 19:59:41

标签: java algorithm mapreduce

假设我有一个数十亿行的文件,大小为500G到1T。如何生成具有相同行的新文件,但随机地随机播放这些行?如果能够实现,洗牌应该是完全随机的。

1 个答案:

答案 0 :(得分:3)

创建一个将GUID映射到您的线的映射器。以下Hadoop映射器说明了逻辑:

public class ShuffleMapper extends Mapper<LongWritable, Text, Text, Text> {
  @Override
  protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    context.write(new Text(UUID.randomUUID().toString()), value);
  }
}

在reducer中,您只需收集行(值)。这可以使用单个reducer完成,或者如果您遇到资源问题(例如本地磁盘已填满),您可以从命令行中拆分多个reducers,然后只分割concat行。

注意:这并不像Fisher-Yates那样提供无偏见的随机播放,但这种解决方案更容易实现且速度非常快。