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