如何使用pig / hive从weblog文件中的url中提取字符串

时间:2015-09-14 16:42:40

标签: shell hadoop hive apache-pig

如何使用pig / hive

从weblog文件中的url中提取字符串

输入文件

122.161.182.202 - jane [21/Jul/2012:13:14:17-0700] "GET /rss.pl HTTP/1.1"   200 35942 "http://www.e.com/bam_applicatin/VD55173061"     "IE/4.0 (compatible; MSIE 7.0; Windows NT 6.0;   Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3;    OfficeLivePatch.1.3; MSOffice 12)"

期望的输出:

122.161.182.202 - jane [21/Jul/2012:13:14:17-0700] "GET /rss.pl HTTP/1.1"   200 35942 "VD55173061"     "IE/4.0 (compatible; MSIE 7.0; Windows NT 6.0;   Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3;    OfficeLivePatch.1.3; MSOffice 12)"

输入网址 http://www.e.com/bam_applicatin/VD55173061

网址中的所需字符串 VD55173061

我想使用pig或hive处理weblog。请帮忙..

2 个答案:

答案 0 :(得分:1)

使用 Apache Pig

请参阅http://pig.apache.org/docs/r0.14.0/func.html#substring了解API文档和用法

输入:

http://www.e.com/bam_applicatin/VD55173061

猪脚本:

url_data = LOAD 'input.csv' USING  PigStorage(',') AS  (url:chararray);
req_url = FOREACH url_data GENERATE SUBSTRING(url,LAST_INDEX_OF(url, '/') + 1, (int)SIZE(url));
DUMP req_url;

输出

VD55173061

答案 1 :(得分:0)

如果您认为要提取的字符串长度相同(此处为10),则可以使用SUBSTR()函数。

  

SUBSTR(string source_str,int start_position [,int length])

在您的情况下,您可以使用类似

的内容
SUBSTR(url, (LENGTH(url)-(10-1))

您可以参考manual pages了解详情。