Hadoop 在mapreduce中为密钥生成多个输出记录
我必须在一个大数据集上执行sql“按组”之类的(不完全是)操作。 我能想到的一个简单的类似例子如下,其中所需的输出可以是 1) 将数据分组(国家、城市、性别、母语) 2) 将数据分组(国家、城市、性别、年龄组) 3) 将数据分组(国家、城市、年龄组) 使用通用map reduce作业,我可以指定将用于分组的字段,但在这种情况下,我必须以这种方式运行此作业3次。 所有3个案例都有重复计算。(通常按国家、城市分组) 如果我想输出按(国家,城市)分组的记录,那么(国家,城市)将是mapreduce作业中的关键,输出应该如下Hadoop 在mapreduce中为密钥生成多个输出记录,hadoop,mapreduce,bigdata,yarn,Hadoop,Mapreduce,Bigdata,Yarn,我必须在一个大数据集上执行sql“按组”之类的(不完全是)操作。 我能想到的一个简单的类似例子如下,其中所需的输出可以是 1) 将数据分组(国家、城市、性别、母语) 2) 将数据分组(国家、城市、性别、年龄组) 3) 将数据分组(国家、城市、年龄组) 使用通用map reduce作业,我可以指定将用于分组的字段,但在这种情况下,我必须以这种方式运行此作业3次。 所有3个案例都有重复计算。(通常按国家、城市分组) 如果我想输出按(国家,城市)分组的记录,那么(国家,城市)将是mapreduce作业
USA new_york female middle english 8
USA seattle male middle english 2
USA new_york male middle french 3
UK london male senior german 6
UK london male junior german 3
此输出可按性别/年龄组/母语进一步分组。在此mapreduce输出中,有多条减速机键记录(美国、纽约)和(英国、伦敦)
在reduce方法中多次调用context.write()可以吗?尽管要做到这一点,我需要在内存中存储其他字段的组合,这些字段可以用于进一步分组(在上面的示例中是性别、年龄组和母亲)
是否可以使用多个输出和一些我不知道的东西?
或者在mapreduce中没有办法实现这一点吗?简单的回答是肯定的。MapReduce可能更好地命名为FlatMapReduce(在函数式编程术语中)。每次调用context.write()都会生成一条新记录 话虽如此,对于这种高度结构化的数据(甚至是半结构化的,有时甚至是非结构化的数据),最好的选择是使用类似于Hive的东西。所有关系代数运算符都已由Hive团队实现。此外,他们还实现了几十个SQL计划优化(就像您描述的那样)
USA new_york female middle english 8
USA seattle male middle english 2
USA new_york male middle french 3
UK london male senior german 6
UK london male junior german 3