Python 如何使用map reduce识别热天和冷天?

Python 如何使用map reduce识别热天和冷天?,python,python-3.x,hadoop,mapreduce,Python,Python 3.x,Hadoop,Mapreduce,我的数据如下所示: 20130101 12.8 9.6 20130102 10.1 3.8 20130103 7.0 -2.2 20130104 11.8 -3.7 20130105 8.6 -1.1 20130106 10.5 1.9 20130107 13.4 -0.1 20130108 16.2 1.4 20130109 17.8 12.4 20130110 20.0 16.2 20130111 15.4 5.0 我想对最高温度大于

我的数据如下所示:

20130101  12.8   9.6
20130102  10.1   3.8
20130103   7.0  -2.2
20130104  11.8  -3.7
20130105   8.6  -1.1
20130106  10.5   1.9
20130107  13.4  -0.1
20130108  16.2   1.4
20130109  17.8  12.4
20130110  20.0  16.2
20130111  15.4  5.0
我想对最高温度大于40(炎热的一天)和最低温度低于10(寒冷的一天)的日期进行分类。 为此,我运行以下代码:

current_date = None
current_temp = None
for line in data.strip(). split('\n'):
    Mapper_data = ["%s\o%s\o%s" % (line.split('  ')[0], line.split('  ')[1],line.split('  ')[2]) ]
    for line in Mapper_data:
        line = line.strip()
        date, max_temp,min_temp = line.rsplit('\o', 2)
        try:
            max_temp = float(max_temp)
            min_temp = float(min_temp)    
       except ValueError:
            continue
       if current_date == date:
           if max_temp > 40:
                current_temp = 'Hot day'
           if min_temp< 10:
                current_temp = 'Cold day'

      else:
            if current_date:
                print ('%s\t%s' % (current_date, current_temp))
            if max_temp > 40:
               current_temp = 'Hot day' 
            if min_temp< 10:
               current_temp = 'Cold day'
           current_date = date
if current_date == date:
    print ('%s\t%s' % (current_date, current_temp))
但我需要的结果是:

20130101    Cold day
20130102    Cold day
20130103    Cold day
20130104    Cold day
20130105    Cold day
20130106    Cold day
20130107    Cold day
20130108    Cold day
20130111    Cold day
因为20130109和20130110既不冷也不热


如果您知道如何更改代码以获得最后的结果,请提供帮助。

如果您想要一个与Hadoop兼容的Python脚本,它需要从STDIN读取

import sys

for line in sys.stdin:
    current_date, max_temp, min_temp = line.split()
    condition = None
    try:
        f_min_temp = float(min_temp)
        f_max_temp = float(max_temp)
    except ValueError:
        continue

    if f_max_temp > 40:
        condition = 'Hot day'
    if f_min_temp < 10:
        condition = 'Cold day'

    if condition:
         print ('%s\t%s' % (current_date, condition))
导入系统 对于sys.stdin中的行: 当前日期,最大温度,最小温度=行分割() 条件=无 尝试: f_最小温度=浮动(最小温度) f_最大温度=浮动(最大温度) 除值错误外: 持续 如果f_max_temp>40: 条件=‘热天’ 如果最低温度<10: 条件=‘寒冷的一天’ 如果条件: 打印(“%s\t%s%”(当前日期、条件)) 下面是一个在本地运行的示例

$ python data.py < data.txt
20130101    Cold day
20130102    Cold day
20130103    Cold day
20130104    Cold day
20130105    Cold day
20130106    Cold day
20130107    Cold day
20130108    Cold day
20130111    Cold day
$python data.py

要在Hadoop中运行,请参见

,了解数据行
没有执行mapreduce。。。您可以从
sys.stdin
获取mapreduce数据<代码>如果当前日期始终为真,感谢您的回复。sys.stdin是否在Jupyter笔记本中工作,因为我尝试过使用它,但它在meJupyter笔记本中不工作也不运行MapReduce。。。您需要将代码发送到Hadoop集群。目前,您所做的只是迭代文件的行并更改一些列。我知道这一点。如果您知道我如何修改代码,那么请允许我在这里只是为了Hadoop标记,而不是Python标记。我链接了如何将Python作为Mapreduce运行,因此我建议您从这里开始,不要使用Jupyter笔记本
$ python data.py < data.txt
20130101    Cold day
20130102    Cold day
20130103    Cold day
20130104    Cold day
20130105    Cold day
20130106    Cold day
20130107    Cold day
20130108    Cold day
20130111    Cold day