Hive Python Streaming的原理及写法
在Hive中,须要实现Hive中的函数无法实现的功能时,就能够用Streaming来实现。
其原理能够理解成:用HQL语句之外的语言,如Python、Shell来实现这些功能,同一时候配合HQL语句,以实现特殊的功能。
比方,我有一张不同站点訪问的日志表,当中有两个列是url和ref。分别代表当前訪问的网址和来源地址,我想要查看用户的来源。即看用户都是从那些站点跳到这些站点上去的。这里有些站点可能域名是二级甚至三级域名,可是这些实际上是属于其顶级域名的。
所以要找出其顶级域名。
这个在Hive的自己定义函数中是无法实现的。所以採用Streaming的方式来实现。
准备表和数据
--建表
drop table if exists view_all;
create table if not exists view_all(
ad STRING,ua STRING,ip STRING,cookie STRING,url STRING,ref STRING,
action STRING,value STRING,timestamp STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
--导入日志数据
load data local inpath 'view_all' overwrite into table view_all;
Python实现获取顶级域名和过滤站内跳转
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
Created on 2014年8月6日
@author: zhaohf
'''
import sys
import urlparse
import re topHostPostfix = (
'.com',
'.net',
'.org',
'.cn',
'.com.cn'
)
#获取顶级域名
def get_top_host(url):
parts = urlparse.urlparse(url)
host = parts.netloc
extractPattern = r'[^\.]+('+'|'.join([h.replace('.',r'\.') for h in topHostPostfix])+')$'
pattern = re.compile(extractPattern,re.IGNORECASE)
m = pattern.search(host)
return m.group() if m else host
#排除站内跳转
if __name__ == '__main__':
for line in sys.stdin:
try:
line = line.strip()
li = line.split('\t')
url = li[4]
ref = li[5]
url_top_host = get_top_host(url)
ref_top_host = get_top_host(ref)
if url_top_host != ref_top_host:
li[4] = url_top_host
li[5] = ref_top_host
newline = ''
for l in li:
newline += '\t'+l
print newline.strip()
else:
pass
except Exception,err:
continue
调用python 脚本
--排除站内跳转
drop table if exists view_from;
CREATE TABLE if not exists view_from like view_from; ADD FILE mapper.py;
INSERT OVERWRITE TABLE view_from
SELECT TRANSFORM(ad,ua,ip,cookie,url,ref,action,value,timestamp)
USING 'python mapper.py'
AS (ad,ua,ip,cookie,url,ref,action,value,timestamp)
FROM view_all
;
亦能够将hql语句保存成文件,使用hive -f query.hql 来调用。
当中须要注意细节,比方__main__被写成了 __mian__。好痛苦!
Hive Python Streaming的原理及写法的更多相关文章
- Python分布式爬虫原理
转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...
- Python Socket通信原理
[Python之旅]第五篇(一):Python Socket通信原理 python Socket 通信理论 socket例子 摘要: 只要和网络服务涉及的,就离不开Socket以及Socket编 ...
- python解释执行原理(转载)
Python解释执行原理 转自:http://l62s.iteye.com/blog/1481421 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要 ...
- [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子
[Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...
- Spark 以及 spark streaming 核心原理及实践
收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...
- python虚拟机运行原理
近期为了面试想要了解下python的运行原理方面的东西,奈何关于python没有找到一本类似于深入理解Java虚拟机方面的书籍,找到了一本<python源码剖析>电子书,但是觉得相对来说最 ...
- python程序执行原理
Python程序的执行原理 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后解释器一条一条执行字节码指令,从而完成程序的执行. 1.1python先把代码(.py ...
- Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化
Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引: 索引 ...
- Spark Streaming的原理
Spark Streaming应用也是Spark应用,Spark Streaming生成的DStream最终也是会转化成RDD,然后进行RDD的计算,所以Spark Streaming最终的计算是RD ...
随机推荐
- 【单调队列】BZOJ1342-[Baltic2007]Sound静音问题
[题目大意] 给出一个n个数的序列,以哪位位置为开头的长度为m的区间满足该区间的最大值与最小值的差≤一个定值. [思路] 单调队列……说一下单调队列比较方便的操作. 把第一个先丢进去,开始条件为hea ...
- hashmap的遍历方法
How to iterate over the entries of a Map? What is the order of iteration - if you are just using Map ...
- 【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间 ...
- bzoj 3252: 攻略 -- 长链剖分+贪心
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神 ...
- android显示TextView文字的倒影效果
今天记录一下TextView的倒影效果,显示一串文字,然后在文字的下方显示出它的倒影,先上效果图: 最重要的就是View中getDrawingCache()方法,该方法可以获取cache中的图像,然后 ...
- PHP通过AJAX及Access-Control-Allow-Origin实现跨域访问
这里的跨域实质上是由浏览器同源策略限制的一类请求场景,浏览器同源策略SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全 ...
- C#多线程编程之:lock使用注意事项
1.避免锁定public类型对象. 如果实例可以被公共访问,将出现lock(this)问题. 如有一个类MyClass,该类有一个Method方法通过lock(this)来实现互斥: 1 public ...
- 你得学会并且学得会的Socket编程基础知识(续)——Silverlight客户端
本文将在这个案例的基础上,加入一个特殊场景,利用Silverlight来实现客户端.有的朋友可能会说,其实是一样的吧.请不要急于下结论,有用过Silverlight的朋友都有这种体会,很多在标准.NE ...
- Oracle手工生成段建议(Segment Advisor)
一.描写叙述 从oracle 10g開始,oracle引入了段顾问(Segment Advisor),用于检查数据库中是否有与存储空间相关的建议,而且从10gR2開始,oracle自己主动调度并执行一 ...
- 算法:优先级队列(PriorityQueue)
背景 此文给出基于已排序数组的实现,多数情况应该基于 Heap 进行实现,因为数组的插入效率为O(n),而 Heap 的插入效率为 Log(n). PriorityQueue 代码 using Sys ...