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,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...
随机推荐
- 如何在GitHub上删除某个文件夹?
步骤: (以删除.idea文件夹为例) git rm -r --cached .idea #--cached不会把本地的.idea删除 git commit -m 'delete .idea dir' ...
- spring cloud与K8S
链接:https://www.zhihu.com/question/50806354/answer/139653085 spring cloud +docker 当然没有问题,只是当我们搭建集群实现高 ...
- apple touch icon 大小总结
<!-- For Chrome for Android: --> <link rel="icon" sizes="192x192" href= ...
- ThinkPHP与EasyUI整合之三(searchbox):在datagrid中查询指定记录
在datagrid中toolbar添加searchbox查询框,根据列范围查询数据,先看效果图: 1. searchbox采用easyui的Demo例子,再加以js扩展,根据datagrid中的列数据 ...
- java FTP 上传下载删除文件
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- List ArrayList LinkedList 集合三
因为List是有顺序的说以API中定义了 方法来处理List Collections 接口:用于操作List集合有排序sort(list);查找int binarySearch(List,obj);c ...
- h5做移动应用开发部分技巧
1.使用多种分别率设备:利用viewport标签<meta name="viewport" content="width=device-width, initial ...
- Android UI开发第二十七篇——实现左右划出菜单
年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...
- hdu 4419 线段树 扫描线 离散化 矩形面积
//离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...
- poj 3670(LIS)
// File Name: 3670.cpp // Author: Missa_Chen // Created Time: 2013年07月08日 星期一 21时15分34秒 #include < ...