我在HDFS上有两个非常大的数据集(表格)。我想在某些列上加入,然后在某些列上将它们分组,然后执行某些组功能一些专栏。
我的步骤是:
1-创建两个职位。
2-在第一个作业中,在mapper中将每个数据集的行读取为map 输入值并发出加入列'值作为地图输出键和 其余列'值作为地图输出值。
映射后,MapReduce框架执行改组和组 根据地图输出键的所有地图输出值。
然后,在reducer中,它读取每个map输出键及其包含的值 两个数据集中的许多行。
我想要的是多次迭代减少输入值,以便我可以执行笛卡尔积。
举例说明:
让我们说连接键x,我有一个数据集和100个匹配 另外200场比赛。这意味着在连接键x上加入它们 产生100 * 200 = 20000组合。我想发出NullWritable作为 减少输出键和每个笛卡儿 产品作为减产值。
示例输出可能是:
用于连接键x:
From(nullWritable),(first(1),second(1))
Over(nullWritable),(first(1),second(200))
To(nullWritable),(first(100),second(200))
我该怎么做?
我只能迭代一次。我无法兑现价值观,因为它们不适合记忆。
3-如果我这样做,我将开始第二个工作,这是第一个工作 作业的结果文件作为输入文件。在mapper中,我发出了组列' 值作为地图输出键,其余列为'值作为地图 产值。然后在reducer中迭代每个键的值,I 在sum,avg,max,min。等某些列上执行某些功能。
提前多多感谢。
答案 0 :(得分:0)
由于您的第一个MR作业使用连接键作为地图输出键,因此您的第一个缩减器将为每个reduce调用获取(K join_key,List< V>值)。您可以做的只是将两个单独的值分成两个单独的列表,每个列表用于数据源,并使用嵌套for循环来执行笛卡尔积。