[英]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.