gpt4 book ai didi

hadoop - 为 mapreduce 中的键生成多个输出记录

转载 作者:可可西里 更新时间:2023-11-01 15:33:35 25 4
gpt4 key购买 nike

我必须对大型数据集执行 sql“分组依据”类型的(不完全是)操作。我能想到的一个简单的类似示例如下所示,其中所需的输出可能是1)将数据分组(国家、城市、性别、母语)2)将数据分组(国家、城市、性别、年龄组)3)将数据分组到(country,city,age_group)

country   city        gender      age_group    mother_tongue     no_of_times_surveyed
----------------------------------------------------------------

USA new_york female middle english 5
USA seattle male middle english 2
USA new_york female middle english 3
USA new_york male middle french 3
UK london male senior german 3
UK london male junior german 3
UK london male senior german 3

使用通用的 map-reduce 作业,我可以指定将用于分组的字段,但在这种情况下,我必须以这种方式运行该作业 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 输出中,reducer 键 (USA,new_york) 和 (UK,london) 有多个记录

在 reduce 方法中多次调用 context.write() 是否可以?尽管要做到这一点,我需要在内存中存储其他字段的组合,这可用于进一步分组(上面示例中的性别、年龄组和 mother_tounge)。

是否可以使用 multipleOutputs 和我不知道的东西?或者有没有办法在 mapreduce 中实现这一点?

最佳答案

简短的回答是肯定的。 MapReduce 最好命名为 FlatMapReduce(在函数式编程术语中)。每次调用 context.write() 都会生成一条新记录。

话虽如此,对于此类高度结构化数据(甚至是半结构化数据,有时甚至是非结构化数据),最好的选择是使用 Hive 之类的东西。 Hive 团队已经实现了所有的关系代数运算符。此外,他们还实现了数十项 SQL 计划优化(如您描述的优化)。

关于hadoop - 为 mapreduce 中的键生成多个输出记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com