Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在mapreduce中为密钥生成多个输出记录_Hadoop_Mapreduce_Bigdata_Yarn - Fatal编程技术网

Hadoop 在mapreduce中为密钥生成多个输出记录

Hadoop 在mapreduce中为密钥生成多个输出记录,hadoop,mapreduce,bigdata,yarn,Hadoop,Mapreduce,Bigdata,Yarn,我必须在一个大数据集上执行sql“按组”之类的(不完全是)操作。 我能想到的一个简单的类似例子如下,其中所需的输出可以是 1) 将数据分组(国家、城市、性别、母语) 2) 将数据分组(国家、城市、性别、年龄组) 3) 将数据分组(国家、城市、年龄组) 使用通用map reduce作业,我可以指定将用于分组的字段,但在这种情况下,我必须以这种方式运行此作业3次。 所有3个案例都有重复计算。(通常按国家、城市分组) 如果我想输出按(国家,城市)分组的记录,那么(国家,城市)将是mapreduce作业

我必须在一个大数据集上执行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