Python Streaming实战2: Join的实现与数据过滤
select a.sid
,a.name
,b.course
,b.score
from Student a
join Score b
on a.SID = b.SID
left outer join Filter c
on a.name = c.name
where c.name is null
(三)Streaming快速编程
1. mapper.py
#!/usr/bin/env python
import os
import sys,re def mapper():
ip = set() # 尽量不要声明global def load_Fil(file='dictlink'):
for line in open():
yield ip.add(line.strip()) def read_input(file):
filepath = os.environ["map_input_file"]
filename = re.findall('(.*).dat',os.path.split(filepath)[-1])[0]
for line in file:
if line.strip()=="":
continue
fields = line[:-1].split("t")
sno = fields[0]
if filename == 'student':
name = fields[1]
yield (sno,'0',name)
elif filename == 'course':
courseno = fields[1]
grade = fields[2]
yield (sno,'1',courseno,grade)
for k in load_Fil():
pass data = read_input(sys.stdin)
for field in data:
if len(field) == 3 and field[2] not in ip:
print 't'.join((field[0],field[1],field[2]))
elif len(field) == 4:
print 't'.join((field[0],field[1],field[2],field[3])) if __name__=='__main__':
mapper()
2. reduce.py
#!/usr/bin/env python
import sys lastsno = ''
for line in sys.stdin:
if line.strip()=="":
continue
fields = line.strip().split('t')
sno = fields[0]
if sno != lastsno:
name=''
if fields[1] == '0':
name = fields[2]
elif sno==lastsno:
if fields[1] == '1':
courseno = fields[2]
grade = fields[3]
#sys.stderr.write('(4) ****:%s||%sn'%(courseno,grade))
if name:
print 't'.join((lastsno,name,courseno,grade))
lastsno = sno
#sys.stderr.write('(6) *****%s=%s*******n'%(lastsno,sno))
(四)准备文件
1. 准备好本地文件
2. 将本地文件student.dat与course.dat 上传到云梯目录
hadoop fs -mkdir /group/alidw/ali-log/wfs/join
hadoop fs -put student.dat course.dat /group/alidw/ali-log/wfs/join
(五)设置Streaming参数并执行
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-0.19.1-dc-streaming.jar
-D stream.num.map.output.key.fields=2
-D num.key.fields.for.partition=1
-D mapred.map.tasks=10
-D mapred.reduce.tasks=3
-D mapred.job.name="join_test"
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
-input /group/alidw/ali-log/wfs/join/course.dat
-input /group/alidw/ali-log/wfs/join/student.dat
-output /group/alidw/ali-log/wfs/joinput
-mapper mapper.py
-reducer reduce.py
-file /home/dwapp/fusen.wangfs/MR/join/mapper.py
-file /home/dwapp/fusen.wangfs/MR/join/reduce.py
-cacheFile /group/alidw/ali-log/wfs/join/filter.dat#dictlink
(六)最后的输出:为了便于查看,你也可以创建外部表
[dwapp@dw-yuntigw-64 join]$ hadoop fs -cat /group/alidw/ali-log/wfs/joinput/part-00000
001 Jack Language 90
001 Jack Math 80
[dwapp@dw-yuntigw-64 join]$ hadoop fs -cat /group/alidw/ali-log/wfs/joinput/part-00001
002 Marry Language 95
002 Marry Math 82
[dwapp@dw-yuntigw-64 join]$ hadoop fs -cat /group/alidw/ali-log/wfs/joinput/part-00002
003 Nacy Language 80
(七)总结
Python Streaming实战2: Join的实现与数据过滤的更多相关文章
- 【python数据分析实战】电影票房数据分析(二)数据可视化
目录 图1 每年的月票房走势图 图2 年票房总值.上映影片总数及观影人次 图3 单片总票房及日均票房 图4 单片票房及上映月份关系图 在上一部分<[python数据分析实战]电影票房数据分析(一 ...
- Python爬虫实战案例:取喜马拉雅音频数据详解
前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...
- 【python数据分析实战】电影票房数据分析(一)数据采集
目录 1.获取url 2.开始采集 3.存入mysql 本文是爬虫及可视化的练习项目,目标是爬取猫眼票房的全部数据并做可视化分析. 1.获取url 我们先打开猫眼票房http://piaofang.m ...
- selenium2 python自动化测试实战(回归测试)
selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...
- Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战4(上) - 接口测试框架实战
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...
- 【Python项目实战】Pandas:让你像写SQL一样做数据分析(一)
1. 引言 Pandas是一个开源的Python数据分析库.Pandas把结构化数据分为了三类: Series,1维序列,可视作为没有column名的.只有一个column的DataFrame: Da ...
- 万字长文,Python数据分析实战,使用Pandas进行数据分析
文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...
随机推荐
- python 动态语言 __slots__
python 是动态语言,就是说可以动态的创建属性, 别的语言不行,再创建类的时候已经规定好了 使用__slots__,注意要用tuple定义同意绑定的属性名称,仅对当前类起作用,对继承的子类是不起作 ...
- In the shell, what does “ 2>&1 ” mean?
In a Unix shell, if I want to combine stderr and stdout into the stdout stream for further manipulat ...
- hdu 2586(最近公共祖先LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好 ...
- ssh远程登录+查看系统版本+使用scp命令上传下载
ssh远程登录命令简单实例 ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh ...
- 转载:tar 解压缩命令~
转载自:http://blog.csdn.net/dunyanan1/article/details/38869059tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文 ...
- java编程:将数组的第一个为最大第二个为最小以此类推
import java.util.Scanner; public class Max_Min { public static void main(String[] args) { int[] a = ...
- ADODB
转自网友,看着挺全就转了,供大家学习研究. Recordset 对象的属性1.CursorType 属性AdOpenForwardOnly: 仅向前游标,默认值.除了只能在记录中向前滚动外,与静态游标 ...
- 如何在Java的Filter中注入Service???
今天在做用户使用cookie自动登录的时候,发现在LoginFilter中读取到cookie以后要进行查询数据库然后进行用户名和密码的比对,查询数据库肯定要用到Service和Dao,一开始我以为在s ...
- 进程通信(socket)
“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...
- 求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)
题目链接:传送门 题目大意:给你一副无向图,求解图的顶点连通度 题目思路:模板(图论算法理论,实现及应用 P396) Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关 ...