×

regexp extract

regexp extract(Hive 如何利用regexp_extract函数提取数字)

admin admin 发表于2023-02-06 08:17:18 浏览52 评论0

抢沙发发表评论

本文目录

Hive 如何利用regexp_extract函数提取数字


case
--处理非科学计数法表示的字符串
when length(regexp_extract(’字符串’,’(+\\.)(+)(E-*+)’,2))=0
then ’字符串’
--处理整数
when length(regexp_extract(’字符串’,’(+\\.)(+)(E+)’,2))《=cast(regexp_extract(’字符串’,’(E)(+)’,2) as int)
then rpad(regexp_replace(regexp_extract(’字符串’,’([^E]+)’,1),’\\.’,’’),cast(regexp_extract(’字符串’,’(E)(+)’,2) as int)+1,’0’)
--处理小数

java 网络爬虫怎么实现


  网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
  传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。
  以下是一个使用java实现的简单爬虫核心代码:  
public void crawl() throws Throwable {
while (continueCrawling()) {
CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL
if (url != null) {
printCrawlInfo();
String content = getContent(url); //获取URL的文本信息

//聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理
if (isContentRelevant(content, this.regexpSearchPattern)) {
saveContent(url, content); //保存网页至本地

//获取网页内容中的链接,并放入待爬取队列中
Collection urlStrings = extractUrls(content, url);
addUrlsToUrlQueue(url, urlStrings);
} else {
System.out.println(url + “ is not relevant ignoring ...“);
}

//延时防止被对方屏蔽
Thread.sleep(this.delayBetweenUrls);
}
}
closeOutputStream();
}
private CrawlerUrl getNextUrl() throws Throwable {
CrawlerUrl nextUrl = null;
while ((nextUrl == null) && (!urlQueue.isEmpty())) {
CrawlerUrl crawlerUrl = this.urlQueue.remove();
//doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的“Robot.txt“中配置的规则进行爬取
//isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap
//isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免
if (doWeHavePermissionToVisit(crawlerUrl)
&& (!isUrlAlreadyVisited(crawlerUrl))
&& isDepthAcceptable(crawlerUrl)) {
nextUrl = crawlerUrl;
// System.out.println(“Next url to be visited is “ + nextUrl);
}
}
return nextUrl;
}
private String getContent(CrawlerUrl url) throws Throwable {
//HttpClient4.1的调用与之前的方式不同
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url.getUrlString());
StringBuffer strBuf = new StringBuffer();
HttpResponse response = client.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), “UTF-8“));
String line = null;
if (entity.getContentLength() 》 0) {
strBuf = new StringBuffer((int) entity.getContentLength());
while ((line = reader.readLine()) != null) {
strBuf.append(line);
}
}
}
if (entity != null) {
nsumeContent();
}
}
//将url标记为已访问
markUrlAsVisited(url);
return strBuf.toString();
}
public static boolean isContentRelevant(String content,
Pattern regexpPattern) {
boolean retValue = false;
if (content != null) {
//是否符合正则表达式的条件
Matcher m = regexpPattern.matcher(content.toLowerCase());
retValue = m.find();
}
return retValue;
}
public List extractUrls(String text, CrawlerUrl crawlerUrl) {
Map urlMap = new HashMap();
extractHttpUrls(urlMap, text);
extractRelativeUrls(urlMap, text, crawlerUrl);
return new ArrayList(urlMap.keySet());
}
private void extractHttpUrls(Map urlMap, String text) {
Matcher m = (text);
while (m.find()) {
String url = m.group();
String terms = url.split(“a href=\““);
for (String term : terms) {
// System.out.println(“Term = “ + term);
if (term.startsWith(“http“)) {
int index = term.indexOf(“\““);
if (index 》 0) {
term = term.substring(0, index);
}
urlMap.put(term, term);
System.out.println(“Hyperlink: “ + term);
}
}
}
}
private void extractRelativeUrls(Map urlMap, String text,
CrawlerUrl crawlerUrl) {
Matcher m = relativeRegexp.matcher(text);
URL textURL = crawlerUrl.getURL();
String host = textURL.getHost();
while (m.find()) {
String url = m.group();
String terms = url.split(“a href=\““);
for (String term : terms) {
if (term.startsWith(“/“)) {
int index = term.indexOf(“\““);
if (index 》 0) {
term = term.substring(0, index);
}
String s = //“ + host + term;
urlMap.put(s, s);
System.out.println(“Relative url: “ + s);
}
}
}

}
public static void main(String args) {
try {
String url = ““;
Queue urlQueue = new LinkedList();
String regexp = “java“;
urlQueue.add(new CrawlerUrl(url, 0));
NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L,
regexp);
// boolean allowCrawl = crawler.areWeAllowedToVisit(url);
// System.out.println(“Allowed to crawl: “ + url + “ “ +
// allowCrawl);
crawler.crawl();
} catch (Throwable t) {
System.out.println(t.toString());
t.printStackTrace();
}
}

hive中怎么查看一个函数的详细信息


  如果是规整的json字符串,可以先使用Hive函数get_json_object取出dySub
  后面的数字,再做sum。
  另外也可以使用Hive函数regexp_extract,使用正则表达式抽取出dySub
  后面的数字。具体可以搜索一下“lxw的大数据田地 hive函数大全“,里面有每种函数的详细用法。
  hivesql sql — 获取指定hive表或指定文件中所有hive表的DDL,如果有按天的分区则默认执行最近7天的分区DDL。同时,table支持符合sql语法的正则表达式,如果有多个表匹配,则提示用户选择(使用file则自动关闭该交互功能)。

hive怎么将字符型转为数值型


hive字符串函数
1. 字符串长度函数:length
语法: length(string A)
返回值: int
说明:返回字符串A的长度
举例:
hive》 select length(’abcedfg’) from lxw_dual;
7
2. 字符串反转函数:reverse
语法: reverse(string A)
返回值: string
说明:返回字符串A的反转结果
举例:
hive》 select reverse(abcedfg’) from lxw_dual;
gfdecba
3. 字符串连接函数:concat
语法: concat(string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果,支持任意个输入字符串
举例:
hive》 select concat(’abc’,’def’,’gh’) from lxw_dual;
abcdefgh
4. 带分隔符字符串连接函数:concat_ws
语法: concat_ws(string SEP, string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符
举例:
hive》 select concat_ws(’,’,’abc’,’def’,’gh’) from lxw_dual;
abc,def,gh
5. 字符串截取函数:substr,substring
语法: substr(string A, int start),substring(string A, int start)
返回值: string
说明:返回字符串A从start位置到结尾的字符串
举例:
hive》 select substr(’abcde’,3) from lxw_dual;
cde
hive》 select substring(’abcde’,3) from lxw_dual;
cde
hive》 selectsubstr(’abcde’,-1) from lxw_dual; (和ORACLE相同)
e
6. 字符串截取函数:substr,substring
语法: substr(string A, int start, int len),substring(string A, intstart, int len)
返回值: string
说明:返回字符串A从start位置开始,长度为len的字符串
举例:
hive》 select substr(’abcde’,3,2) from lxw_dual;
cd
hive》 select substring(’abcde’,3,2) from lxw_dual;
cd
hive》select substring(’abcde’,-2,2) from lxw_dual;
de
7. 字符串转大写函数:upper,ucase
语法: upper(string A) ucase(string A)
返回值: string
说明:返回字符串A的大写格式
举例:
hive》 select upper(’abSEd’) from lxw_dual;
ABSED
hive》 select ucase(’abSEd’) from lxw_dual;
ABSED
8. 字符串转小写函数:lower,lcase
语法: lower(string A) lcase(string A)
返回值: string
说明:返回字符串A的小写格式
举例:
hive》 select lower(’abSEd’) from lxw_dual;
absed
hive》 select lcase(’abSEd’) from lxw_dual;
absed
9. 去空格函数:trim
语法: trim(string A)
返回值: string
说明:去除字符串两边的空格
举例:
hive》 select trim(’ abc ’) from lxw_dual;
abc
10. 左边去空格函数:ltrim
语法: ltrim(string A)
返回值: string
说明:去除字符串左边的空格
举例:
hive》 select ltrim(’ abc ’) from lxw_dual;
abc
11. 右边去空格函数:rtrim
语法: rtrim(string A)
返回值: string
说明:去除字符串右边的空格
举例:
hive》 select rtrim(’ abc ’) from lxw_dual;
abc
12. 正则表达式替换函数:regexp_replace
语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
举例:
hive》 select regexp_replace(’foobar’, ’oo|ar’, ’’) from lxw_dual;
fb
13. 正则表达式解析函数:regexp_extract
语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
举例:
hive》 select regexp_extract(’foothebar’, ’foo(.*?)(bar)’, 1) fromlxw_dual;
the
hive》 select regexp_extract(’foothebar’, ’foo(.*?)(bar)’, 2) fromlxw_dual;
bar
hive》 select regexp_extract(’foothebar’, ’foo(.*?)(bar)’, 0) fromlxw_dual;
foothebar
注意,在有些情况下要使用转义字符,下面的等号要用双竖线转义,这是java正则表达式的规则。
select data_field,
regexp_extract(data_field,’.*?bgStart\\=([^&]+)’,1) as aaa,
regexp_extract(data_field,’.*?contentLoaded_headStart\\=([^&]+)’,1) as bbb,
regexp_extract(data_field,’.*?AppLoad2Req\\=([^&]+)’,1) as ccc
from pt_nginx_loginlog_st
where pt = ’2012-03-26’limit 2;
14. URL解析函数:parse_url
语法: parse_url(string urlString, string partToExtract [, stringkeyToExtract])
返回值: string
说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
举例:
hive》 selectparse_url(’如果没有找该str字符,则返回0
举例:
hive》 select find_in_set(’ab’,’ef,ab,de’) from lxw_dual;
2
hive》 select find_in_set(’at’,’ef,ab,de’) from lxw_dual;
0

tableau 支持正则表达式吗


支持。
REGEXP_EXTRACT(string, pattern)
返回与正则表达式模式匹配的字符串部分。
示例:
REGEXP_EXTRACT(’abc 123’, ’[a-z]+\s+(\d+)’) = ’123’
REGEXP_EXTRACT_NTH(string, pattern, index)
返回与正则表达式模式匹配的字符串部分。
示例:
REGEXP_EXTRACT_NTH(’abc 123’, ’([a-z]+)\s+(\d+)’, 2) = ’123’
REGEXP_MATCH(字符串, 模式)
如果指定的字符串的子字符串匹配正则表达式模式,则返回 true。
示例:
REGEXP_MATCH(’-(.[The.Market])-’,’\[\s*(\w*\.)(\w*\s*\])’)=true

hive regexp_extract 字符拆分中那些符号含义


case
--处理非科学计数法表示的字符串
when length(regexp_extract(’字符串’,’(+\\.)(+)(E-*+)’,2))=0
then ’字符串’
--处理整数
when length(regexp_extract(’字符串’,’(+\\.)(+)(E+)’,2))《=cast(regexp_extract(’字符串’,’(E)(+)’,2) as int)
then rpad(regexp_replace(regexp_extract(’字符串’,’([^E]+)’,1),’\\.’,’’),cast(regexp_extract(’字符串’,’(E)(+)’,2) as int)+1,’0’)
--处理小数

hive字符串取值


如果是规整的json字符串,可以先使用Hive函数get_json_object取出dySub
后面的数字,再做sum。
另外也可以使用Hive函数regexp_extract,使用正则表达式抽取出dySub
后面的数字。具体可以搜索一下“lxw的大数据田地 hive函数大全“,里面有每种函数的详细用法。