[英]How to steps differences reduce in Hadoop?
如何在 Hadoop 中减少步骤差异?
我对理解 Hadoop 有疑问。我有两个文件,首先我在这些文件之间进行了连接。 一个文件是关于国家的,另一个是关于每个国家的客户的。
例如,clients.csv:
Bertram Pearcy ,bueno,SO
Steven Ulman ,regular,ZA
Countries.csv
Name,Code
Afghanistan,AF
Ã…land Islands,AX
Albania,AL
…
我做了一个 map reduce,它告诉我有多少“好”(bueno)客户有一个国家(ZA,SO)和国家。csv 我知道我们正在谈论的国家。
我编程:
def steps(self):
# ordenamos las operaciones para su ejecución.
return [
MRStep(mapper=self.mapper
,reducer=self.reducer),
MRStep(mapper=self.mapper1
,combiner=self.combiner_cuenta_palabras
,reducer=self.reducer2
),
]
我的 map/reduce 的结果是:
["South Georgia and the South Sandwich Islands"] 1
["South Sudan"] 1
["Spain"] 3
现在,我想知道哪一个是最好的。
我加了一个减少更多。
def reducer3(self, _, values):
yield _, max (values)
def steps(self):
# ordenamos las operaciones para su ejecución.
return [
MRStep(mapper=self.mapper
,reducer=self.reducer),
MRStep(mapper=self.mapper1
,combiner=self.combiner_cuenta_palabras
,reducer=self.reducer2),
MRStep(#mapper=self.mapper3,
reducer=self.reducer3
#,reducer=self.reducer3
),
]
但我的答案与没有那个减速器的答案相同
我尝试使用一个 map/reduce 程序添加另一个 reduce。 它不起作用。
通过我的第一次减少,我得到了:
A, 10
C, 2
D, 5
现在,我想使用我得到的结果:A,10
附加评论:
INPUT [Fille1]+[File2] =>在此处输入图像描述
映射/减少 => 输出
现在,我需要通过额外的 map/reduce(我想使用我所做的)得到另一个答案。
第一)例如,一个且唯一的答案。 示例: 3 Spain
第二)所有最好或更大的数字, 3 Spain
和3 Guan
。
我尝试使用:
def reducer3(self, _, values):
yield _, max (values)
我补充说,
def steps(self):
# ordenamos las operaciones para su ejecución.
return [
MRStep(mapper=self.mapper
,reducer=self.reducer),
MRStep(mapper=self.mapper1
,combiner=self.combiner_cuenta_palabras
,reducer=self.reducer2),
MRStep(reducer=self.reducer3
),
]
但我仍然有相同的结果。 我知道 REDUCER3 正在使用,因为如果我写max(values)+1000
给我相同的结果但数字1001
, 1003
你的 reducer 有 3 个不同的键,因此你找到每个键的最大值,而values
只有一个元素(尝试打印它的长度......)。 因此,您会得到 3 个结果。
例如,您需要第三个返回(None, f'{key}|{value})
的映射器,然后所有记录将被发送到一个 reducer ,然后您可以在其中迭代、解析和聚合结果
def reducer3(self, _, values):
_max = float('-inf')
k_out = None
for x in values:
k, v = x.split('|')
if int(v) > _max:
_max = v
k_out = k
yield k_out, _max
这只会为所有值返回一个结果。 如果你想捕获相等的最大值,我认为你需要多次遍历列表,然后在找到的最大元素的循环中产生
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.