马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
R语言是大数据分析和挖掘重要的工具,主要用于统计分析、绘图、数据挖掘。 SAP HANA内部集成了R模块,R程序容许以RLANG存储过程的形式嵌入到SAP HANA的SQL代码中。 SAP HANA与R集成环境主要由三大部分构成:SAP HANA数据库、R环境以及我们的基于SAP HANA与R的应用。
1.环境准备 我们除了要准备SAP HANA数据库外,还要额外准备好R环境(并且需要安装好Rserve包)。然后我们需要在SAP HANA indexserver中配置相应的Rserve信息,以让两者可以协调工作。具体安装配置信息可见 http://help.sap.com/hana/SAP_HANA_R_Integration_Guide_en.pdf
2.SAP HANA数据库准备
我们首先创建要用到的SCHEMA、TABLE以及相应的TABLE TYPE。
- CREATE SCHEMA RTEST;
- SET SCHEMA RTEST;
- CREATE TABLE URL(
- URL VARCHAR(500)
- );
- CREATE TABLE URL_CONTENT(
- "URL" VARCHAR(500),
- "CONTENT" NCLOB,
- "LANGU" VARCHAR(5)
- );
- CREATE TYPE URL_TYPE AS TABLE ( "URL" VARCHAR(500))
- CREATE TYPE URL_CONTENT_TYPE AS TABLE (
- "URL" VARCHAR(500),
- "CONTENT" NCLOB,
- "LANGU" VARCHAR(5)
- );
其中表URL(见下图)存储了需要抓取网页内容的URL集合,URL_CONTENT表用于存储URL抓取下来的正文内容。URL_TYPE是表URL对应的表类型,URL_CONTENT_TYPE是URL_CONTENT表对应的表类型。
3. RLANG爬虫实现 为了使用R抓取网页,我们首先安装RCurl包,即可实现简单的网页抓取任务。主要代码如下所示:
- CREATE PROCEDURE CRAWLER_R (IN url URL_TYPE,OUT result URL_CONTENT_TYPE)
- language rlang as
- begin
- setwd("/tmp/")
- --自定义function用于抓取网页内容
- crawler<-function(url){
- tryCatch({
- library("RCurl")
- --调用getURL方法即可抓取网页HTML源码
- html<-getURL(url[1],.encoding="utf-8",.mapUnicode = FALSE)
- return (html)
- },error=function(err){
- return("")
- },finally={
- gc()
- }
- )
- }
- --调用自定义方法crawler,并保存结果
- content<-as.character(Apply(url,1,crawler))
- --抓取结果写回数据库表中
- result <- as.data.frame(cbind(URL=url$URL,CONTENT=content), stringsAsFactors=FALSE)
- end;
上面的RProcedure需要传入两个数据库表;第一个表存储了要抓取的URL记录,第二个表用于存储抓取的网页正文内容。代码中crawler是自定义的用于抓取网页的方法。在crawler中我们使用了RCurl包下的getURL方法来实现网页的抓取,该方法可以直接返回网页的HTML源码。然后我们再从HTML源码中提取出网页正文内容。关于提取HTML正文内容的方法有很多,比如可以基于XPATH将HTML解析成XML文档,然后剔除无用的HTML结点,最终保留下正文内容;也可以基于行块分分布函数来抽取正文内容等等。 上述RProcedure的抓取过程是单线程的,无法并发执行,当需要大批量抓取网页内容时速度比较慢。这时我们可以借助R的并发包parallel将上述程序改写成多线程版本的。 RProcedure完成之后我们可以使用下面命令来调用: CALL CRAWLER_R(URL,URL_CONTENT) with overview;
下图显示了最终抓取的网页内容。
|