【Python机器学习】Hadoop流

Hadoop是一个开源的Java项目,为运行MapReduce作业提供了大量所需的功能。除了分布时计算之外,Hadoop自带分布式文件系统。

Hadoop可以运行Java之外的其他语言编写的分布式程序。Hadoop流很像Linux系统重的管道(管道使用符号 | ,可以将一个命令的输入作为另一个命令的输出)。如果用mapper.py调用mapper,用reducer.py调用reducer,那么Hadoop流就可以想Linux命令一样执行,例如

复制代码
cat inputFile.txt | python3 mapper.py | sort | python3 reducer.py > outputFile.txt

这样,类似的Hadoop流就可以在多台机器上分布式执行,用户可以通过Linux命令来测试python语言编写的MapReduce脚本。

分布式计算均值和方差的mapper

下面是一个在海量数据上构建的分布式计算均值和方差的MapReduce作业:

python 复制代码
import sys
from numpy import mat,mean,power

def read_input(file):
    for line in file:
        yield line.strip()

input = read_input(sys.stdin)
input=[float(line) for line in input]
numInputs=len(input)
input=mat(input)
sqInput=power(input,2)
print('%d\t%f\%f' % (numInputs,mean(input),mean(sqInput)))
print >> sys.stderr,'report: still alive'

Linux下的调用命令:

python 复制代码
cat inputFile.txt | python3 map.py

Windows系统下调用命令,在DOS窗口:

python 复制代码
python3 map.py < inputFile.txt

分布式计算均值和方差的reducer

mapper接受原始的输入并产生中间值传递给reducer。很多mapper是并行执行的,所以需要将这些mapper的输出合并成一个值。接下来是reducer的代码:将中间的key/value对进行组合:

python 复制代码
import sys
from numpy import mat,mean,power

def read_input(file):
    for line in file:
        yield line.strip()

input=read_input(sys.stdin)
mapperOut=[line.split('\t') for line in input]
cumVal=0.0
cumSumSq=0.0
cumN=0.0
for instance in mapperOut:
    nj=float(instance[0])
    cumN=cumN+nj
    cumVal=cumVal+float(instance[1])
    cumSumSq=cumSumSq+float(instance[2])
mean=cumVal/cumN
varSum=(cumSumSq-2*mean*cumVal+cumN*mean*mean)/cumN
print('%d\t%f\t%f' % (cumN,mean,varSum))
print >> sys.stderr,'report: still alive'

Linux下的调用命令:

python 复制代码
%cat inputFile.txt | python3 map.py | python3 reduce.py

Windows系统下调用命令,在DOS窗口:

python 复制代码
%python3 map.py < inputFile.txt | python3 reduce.py
相关推荐
Q26433650232 分钟前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
Zhou1411363 分钟前
MyBatisPlus_02_条件构造器与高级功能
java·开发语言·python
qyz_hr22 分钟前
央国企人力资源穿透式监管的关键领域、核心机制与数智化路径研究
大数据·人工智能
打工仔折腾 AI23 分钟前
网易UU远程实测:手机控电脑做Python开发和Agent调试的真实体验
人工智能·后端·python·智能手机·性能优化·电脑·ai agent 实战
轩轶子28 分钟前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
“AI国潮设计-小江”31 分钟前
【AIGC实战】Python+SDXL打造潮汕国潮IP:英歌舞麻将的自动化生成与商用思路
开发语言·人工智能·python·prompt·aigc
zh路西法34 分钟前
【上手一只MicroDuck】:(一)从机器人结构到强化学习训练框架
python·强化学习·huggingface·ppo·mujoco·microduck
MayBaymax37 分钟前
ES 基础总结
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客41 分钟前
两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch
大数据·数据库·spring boot·elasticsearch·搜索引擎·全文检索·prometheus
nvd111 小时前
Flink 极简入门与零常驻批处理架构实战:从双模式辨析到 GitOps 通用模具治理
大数据·架构·flink