RODPS安装

ODPS package依赖rJava和RSQLite,因此如果rJava还没有安装的话系统会提示首先要安装rJava和RSQLite, 可以用以下命令安装

install.packages(c('rJava','RSQLite'))

默认镜像如果访问不了,可以使用以下命令切换至国内的镜像,如切换至北交大镜像。

setRepositories(addURLs=c(CRANxtras="http://mirror.bjtu.edu.cn/cran/"))

用以下命令安装ODPS包

install.packages('RODPS',repos='http://odps.alibaba-inc.com/rodps')

RODPS访问配置

创建配置文件odps_config.ini,填入对应的信息。

project_name=$YOUR_PROJECT
access_id=$YOUR_ACCESS_ID
access_key=$YOUR_ACCESS_KEY
end_point=$ODPS_END_POINT
dt_end_point=$DT_END_POINT

在程序中使用以下命令初始化RODPS环境

library("RODPS")
rodps.init(path="$YOUR_PATH/odps_config.ini")

RODPS代码模板

R语言的弱点在于不能操作海量的数据,ODPS是阿里云大数据平台,通过SQL语句处理TB级、PB级数据毫无压力。ODPS的存储基础是表,与R的数据框对应,都是结构化的数据,因此可以很好衔接。一般情况下,用R进行海量数据分析的工作流程是:首先用SQL从大表里统计得到小表,然后将小表加载到R的数据框里。用原生态的RODPS函数,实现这个流程比较琐碎,因此集成了一个函数load.odps.sql,只要传入project和sql的select语句,就能把select的结果存为数据框。

library("RODPS")
rodps.init(path="$YOUR_PATH/odps_config.ini")
rodps.use.project(projectname = "$YOUR_PROJECT")
# self-defined function: transform the sql result to data frame
load.odps.sql <- function(project,sql){
  table_name <- paste0(project,".tmpttttttttttttcsp")
  sql_cmd <- paste("create table if not exists", table_name, "as", sql)
  rodps.query(sql_cmd)
  df <- rodps.load.table(table_name)
  sql_drop_cmd = paste("drop table if exists", table_name, ";") 
  rodps.query(sql_drop_cmd)
  return(df)
}
project <- "$YOUR_PROJECT"
sql_cmd <- "YOUR_SQL_SELECT_CMD"
df <- load.odps.sql(project, sql_cmd)