为了账号安全,请及时绑定邮箱和手机立即绑定

适用于特定数据集的最高/最低温度的python hadoop代码

适用于特定数据集的最高/最低温度的python hadoop代码

婷婷同学_ 2021-03-29 12:59:29
我正在尝试制作一个映射器/还原器程序,以从数据集中计算最大/最小温度。我试图自己修改,但是代码不起作用。鉴于我在mapper中进行了更改,因此mapper可以正常运行,但reducer不能运行。我的示例代码:mapper.pyimport reimport sysfor line in sys.stdin:  val = line.strip()  (year, temp, q) = (val[14:18], val[25:30], val[31:32])  if (temp != "9999" and re.match("[01459]", q)):    print "%s\t%s" % (year, temp)reducer.pyimport sys   (last_key, max_val) = (None, -sys.maxint)   for line in sys.stdin:   (key, val) = line.strip().split("\t")   if last_key and last_key != key:        print "%s\t%s" % (last_key, max_val)        (last_key, max_val) = (key, int(val))        else:        (last_key, max_val) = (key, max(max_val, int(val)))    if last_key:           print "%s\t%s" % (last_key, max_val)文件中的示例行:690190,13910,2012 ** 0101 * 42.9,18,29.4,18,1033.3,18,968.7,18,10.0,18,8.7,18,15.0,999.9,52.5,31.6 *,0.00I,999.9,000000,我需要用粗体显示的值。任何的想法!!如果我将mapper作为简单代码运行,这是我的输出:root@ubuntu:/home/hduser/files# python maxtemp-map.py2012    42.92012    50.02012    47.02012    52.02012    43.42012    52.62012    51.12012    50.92012    57.82012    50.72012    44.62012    46.72012    52.12012    48.42012    47.12012    51.82012    50.62012    53.42012    62.92012    62.6该文件包含不同的年份数据。我必须计算每年的最小值,最大值和平均值。FIELD   POSITION  TYPE   DESCRIPTIONSTN---  1-6       Int.   Station number (WMO/DATSAV3 number)                         for the location.WBAN    8-12      Int.   WBAN number where applicable--this is the                         historical YEAR    15-18     Int.   The year.MODA    19-22     Int.   The month and day.TEMP    25-30     Real   Mean temperature. Missing = 9999.9Count   32-33     Int.   Number of observations in mean temperature
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

如果您有诸如商店名称和商店总销售额之类的东西作为映射器的中间结果,则可以使用以下内容作为化简器来找出最大销售额,以及哪个商店具有最大销售额。同样,它将找出最低销售额,以及哪家商店的最低销售额。


以下减速器代码示例假定您具有每个商店的销售总额作为输入文件。


#! /usr/bin/python


import sys


mydict = {}


salesTotal = 0

oldKey = None


for line in sys.stdin:

    data=line.strip().split("\t")


    if len(data)!=2:

        continue


    thisKey, thisSale = data


    if oldKey and oldKey != thisKey:

        mydict[oldKey] = float(salesTotal)

        salesTotal = 0


    oldKey = thisKey

    salesTotal += float(thisSale)


if oldKey!= None:

    mydict[oldKey] = float(salesTotal)


maximum = max(mydict, key=mydict.get)

print(maximum, mydict[maximum])


minimum = min(mydict, key=mydict.get)

print(minimum, mydict[minimum])


查看完整回答
反对 回复 2021-04-06
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信