整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

12.7.2MapReduce 脚本

hadoop 小红牛 7℃ 0评论

和 Hadoop Streaming 类似,TRANSFORM、MAP 和 REDUCE 子句可以在 Hive中调用外部脚本。假设我们像范例12-1那样,用一个脚本来过滤不符 合某个条件的行,即删除低质量的气温读数。

范例12-1.过滤低质量气象记录的Python脚本

#!/usr/bin/env python
import re 
import sys
for line in sys.stdin:
(year, temp, q) = line.strip().split() 
if (temp != "9999" and re.match("[01459]", q)): 
print "%s\t%s" % (year, temp)

我们可以像范例12-2这样使用这个脚本。

范例12-2.使用Python脚本

hive> ADD FILE /Users/tom/book-workspace/hadoop-book/chl2/src/main/python/ is_gocxJ_quality.py;
 hive> FROM records2
    >SELECT TRANSFORM(year,temperature,quality)
    >USING ’is_good_quality.py’
    >AS year, temperature;
1950     0
1950     22
1950    -11
1949    111
1949    78

在运行査询之前,我们需要在Hive中注册脚本。通过这一操作,Hive知道 需要把脚本文件传输到Hadoop集群上(参见8.4.2节对分布式缓存的讨论)。

査询本身把year, temperature和quality这些字段以制表符分隔的行 的形式流式传递给脚本并把制表符分隔的输出解析为 year和temperature字段,最终形成査询的输出。

这一示例并不使用reducer。如果要用査询的嵌套形式,我们可以指定map
和reduce函数。这一次我们用MAP和REDUCE关键字。但在这两个地方用 SELECT TRANSFORM
也能达到同样的效果。max_temperature_reduce.py脚本的内容参见范例2-11:

FROM (  
        FROM records2
        MAP year, temperature, quality 
        USING 'is_good_quality.py'
        AS year, temperature) map__output 
    REDUCE year, temperature
    USING 'max_temperatureareduce.py'
    AS year, temperature;

转载请注明:全栈大数据 » 12.7.2MapReduce 脚本

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址