gpt4 book ai didi

java - 正则表达式在PIG中使用双引号

转载 作者:行者123 更新时间:2023-12-02 21:41:42 24 4
gpt4 key购买 nike

我正在编写一个 pig 脚本来处理来自sophos代理的访问日志。

每行就像:

2015:01:13-00:00:01 AR-BADC-FAST-01 httpproxy[27983]: id="0001" severity="info" sys="SecureWeb" sub="http" name="http access" action="pass" method="GET" srcip="10.20.7.210" dstip="10.24.2.7" user="" ad_domain="" statuscode="302" cached="0" profile="REF_DefaultHTTPProfile (Default Web Filter Profile)" filteraction="REF_DefaultHTTPCFFAction (Default content filter action)" size="0" request="0x9ac68d0" url="http://www.google.com" exceptions="av,auth,content,url,ssl,certcheck,certdate,mime,cache,fileextension" error="" authtime="0" dnstime="1" cattime="0" avscantime="0" fullreqtime="239428" device="0" auth="0"



因此,我设法使用以下正则表达式在Java中使用MapReduce做到了这一点: \"([^\"]*)\"获取引号之间的值,然后对其进行处理。现在,我想对pig进行同样的操作,但是我无法将正则表达式应用于每行。

我正在做:
input = load './http.log' as (line : chararray);
splt = foreach input generate FLATTEN(REGEX_EXTRACT_ALL(line,'(\\"([^\\"]*)\\")'));
dump splt;

转储的结果是:()。

使用REGEX_EXTRACT_ALL缺少某些东西,还是我不得不以其他方式转义正则表达式的某些字符?

谢谢!

最佳答案

我设法用另一种方法提取值,因为我只想要该行的某些字段。

为了获得我正在做的值:

splt = FOREACH A GENERATE
FLATTEN(REGEX_EXTRACT(line,'.*url="([^"]*)".*',1)) AS url,
FLATTEN(REGEX_EXTRACT(line,'.*fullreqtime="([^"]*)".*',1)) AS duration,
FLATTEN(REGEX_EXTRACT(line,'.*size="([^"]*)".*',1)) AS bytes;

然后我可以继续其余的脚本

关于java - 正则表达式在PIG中使用双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com