1.在sparkR的shell中交互式使用

sparkR --masterspark://10.130.2.20:7077

sparkR --masterlocal[6]

#sparkR --master Spark://10.130.2.20:7077--driver-memory 3g --executor-memory 2g --total-executor-cores 12

2.在R脚本中使用

if(nchar(Sys.getenv("SPARK_HOME")) < 1) {

Sys.setenv(SPARK_HOME ="/home/spark")

}

library(SparkR,lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R","lib")))

sc <-sparkR.init(master = "spark://10.130.2.20:7077",sparkEnvir =list(spark.driver.memory="3g"))

三、saprkR DataFrame的基本使用

DataFrame是数据组织成一个带有列名称的分布式数据集。在概念上和关系型数据库中的表类似,或者和R语言中的data frame类似,但是这个提供了很多的优化措施。构造DataFrame的方式有很多:可以通过结构化文件中构造;可以通过Hive中的表构造;可以通过外部数据库构造或者是通过现有R的data.frame构造等等。

1.从SparkContext和SQLContext开始

  SparkContext是SparkR的切入点,它使得你的R程序和Spark集群互通。你可以通过sparkR.init来构建SparkContext,然后可以传入类似于应用程序名称的选项给它。如果想使用DataFrames,我们得创建SQLContext,这个可以通过SparkContext来构造。如果你使用SparkR shell, SQLContext 和SparkContext会自动地构建好。

sc <- sparkR.init()

sqlContext <- sparkRSQL.init(sc)

2.创建DataFrame

  如果有SQLContext实例,那么应用程序就可以通过本地的R data frame(或者是Hive表;或者是其他数据源)来创建DataFrames。下面将详细地介绍。

(1)通过本地data.frame构造

  最简单地创建DataFrames是将R的data frame转换成SparkR DataFrames,我们可以通过createDataFrame来创建,并传入本地R的data.frame以此来创建SparkR DataFrames,下面例子就是这种方法:

user=data.frame(name=c('zhangsan','lisi','wangwu','zhaoliu'),age=c(21,23,20,27))

df <- createDataFrame(sqlContext, user)

(2)通过Data Sources构造

  通过DataFrame接口,SparkR支持操作多种数据源,本节将介绍如何通过Data Sources提供的方法来加载和保存数据。你可以阅读Spark SQL编程指南来了解更多的options选项.

  Data Sources中创建DataFrames的一般方法是使用read.df,这个方法需要传入SQLContext,需要加载的文件路径以及数据源的类型。SparkR内置支持读取JSON和Parquet文件,而且通过Spark Packages你可以读取很多类型的数据,比如CSV和Avro文件。

  下面是介绍如何JSON文件,注意,这里使用的文件不是典型的JSON文件。每行文件必须包含一个分隔符、自包含有效的JSON对象:

people <- read.df(sqlContext, "/wmf/people.json", "json")

head(people)

# SparkR 能自动从Json文件推断schema

printSchema(people)

  Data sources API还可以将DataFrames保存成多种的文件格式,比如我们可以通过write.df将上面的DataFrame保存成Parquet文件:

write.df(people, path="people.parquet", source="parquet", mode="overwrite")

(3)通过Hive tables构造

  我们也可以通过Hive表来创建SparkR DataFrames,为了达到这个目的,我们需要创建HiveContext,因为我们可以通过它来访问Hive MetaStore中的表。注意,Spark内置就对Hive提供了支持。

hiveContext <- sparkRHive.init(sc)

sql="能在bdcmagic上运行的sql语句"

results<-sql(hiveContext, sql)

head(results)

3.DataFrame的相关操作

SparkR DataFrames中提供了大量操作结构化数据的函数,这里仅仅列出其中一小部分,详细的API可以参见SparkR编程的API文档。

http://spark.apache.org/docs/latest/api/R/index.html

(1)选择行和列

#创建一个数据框

user=data.frame(name=c('zhangsan','lisi','wangwu','zhaoliu'),age=c(21,23,20,27))

df <-createDataFrame(sqlContext, user)

#获得数据框的一个基本信息

df

#选择某一列

head(select(df,df$name))#或者直接使用数据框的列名来选择head(select(df,name))

#过滤,选择满足条件的行

head(filter(df,df$age < 23))

(2)Grouping和Aggregation

#n操作符其实就是count的意思

head(summarize(groupBy(df,df$sex), count = n(df$sex)))

#数据框的排序

sex_counts=summarize(groupBy(df,df$sex), count = n(df$sex))

head(arrange(sex_counts,desc(sex_counts$count)))

(3)列上面的操作

SparkR提供了大量的函数用于直接对列进行数据处理的操作。

#为数据框增加一列

df$second_age=df$age+10

head(df)

(4)在数据框上使用SQL查询

#创建一个数据框

...

#将数据框注册成表

registerTempTable(df,"people")

#运行sql语句

sql(hiveContext,"sql语句,eg:select * from people")

四、sparkR RDD的基本使用

需要指出的是,在Spark 1.4版本中,SparkR的RDD(弹性分布式数据集) API被隐藏起来没有开放,主要是出于两点考虑:

  RDD API虽然灵活,但比较底层,R用户可能更习惯于使用更高层的API;

  RDD API的实现上目前不够健壮,可能会影响用户体验,比如每个分区的数据必须能全部装入到内存中的限制,对包含复杂数据类型的RDD的处理可能会存在问题等。

由于目前RDD API 并没有对外开放,所以使用这些函数时必须要加上SparkR:::。

对于RDD的创建和使用,会结合期货代码来讲解。下面简单给出了用到的函数。

a.RDD的创建

rdd<-SparkR:::textFile(sc,”path”)

或者

rdd<-SparkR:::parallelize(sc,list)

b.RDD函数的使用

SparkR:::map()

SparkR:::collect()

五、其他需要注意的

1.在集群上导入工具包的时候请使用以下方式导入,本地的话都可以。

SparkR:::includePackage(sc,dplyr)

2.当数据很大时不要使用collect()函数,会撑爆本地内存

3.as.data.frame(df)  该函数将sparkR的数据框转化成了R的数据框,同样该函数在数据量很大的时候不要使用。

4.自己试验的使用不要使用集群,占资源,在本地开多线程即可

六、Conference

SparkR官方指南:http://spark.apache.org/docs/latest/sparkr.html

SparkR API文档:http://spark.apache.org/docs/latest/api/R/index.htmlR语言--saprkR基本使用

R语言--saprkR基本使用的更多相关文章

  1. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  2. R语言环境安装与基本使用

    R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...

  3. R语言绘制空间热力图

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...

  4. [R]R语言中的%>%和%.%

    最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...

  5. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  6. 用R语言的quantreg包进行分位数回归

    什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...

  7. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  8. R语言-处理异常值或报错的三个示例

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...

  9. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

随机推荐

  1. 转inux Shell编程入门

    http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...

  2. qsort函数、sort函数

    先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有 ...

  3. Linux时间子系统(十六) clockevent

    一.clock event控制的通用逻辑 1.产生clock event的设备 各种系统的timer硬件形形色色,不过在general clock event device layer,struct ...

  4. 杭电 1800 Flying to the Mars(贪心)

    http://acm.hdu.edu.cn/showproblem.php?pid=1800 Flying to the Mars Time Limit: 5000/1000 MS (Java/Oth ...

  5. ASP.NET Helper

  6. 有关UITableviewCell 重用内存 内部解析

    重用实现分析 查看UITableView头文件,会找到NSMutableArray*  visiableCells,和NSMutableDictnery* reusableTableCells两个结构 ...

  7. 使struct对象拥有可变大小的数组——(C++深度探索)

    首先摘录<Inside The C++ Object Model>中的一段话: 把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组: ...

  8. jQuery 隐藏与显示 input 默认值

    分享下jQuery如何隐藏和显示 input 默认值的例子. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  9. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...

  10. hdoj1114 Piggy-Bank

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...