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. qsort函数、sort函数

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

  2. jdbc与odbc的差别,感悟,学习。。。

    什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可訪问各类关系数据库.JDBC也是jav ...

  3. Python rfind()方法

    描述 Python rfind() 返回子字符串最后一次出现在字符串中的索引位置,该方法与rindex() 方法一样,只不过如果子字符串不在字符串中不会报异常,而是返回-1. 语法 rfind() 方 ...

  4. [转]Hspice 语法手册

    一.HSPICE基础知识Avant! Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准.目前, ...

  5. 使用 dockerfile 创建镜像

    dockerfile 是一个文本格式的配置文件,可以使用 dockerfile 快速创建自定义的镜像. dockerfile 一般包含4部分信息:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行 ...

  6. 由于CentOS的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题

    由于CentOS6的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compression not available问题.解 ...

  7. Shiro整合SSH开发3:配置Shiro认证后页面地址跳转问题(和详述不配置须要注意的问题)

         在视频教程中讲请求认证成功后跳转页面的问题是一笔带过的,可是我认为有必要单独写一篇相应的文章进行叙述.      我用了SSH来整合Shiro,在开发后验证的过程中,每次登陆后Shiro都会 ...

  8. 成员函数的重载&amp;&amp;隐藏&amp;&amp;覆盖

    /* *成员函数的重载,覆盖,隐藏 *重载: *1.同样的范围(在同一个类中) *2.函数名同样 *3.參数不同 *4.virtualkeyword可有可无 *覆盖是指派生类覆盖基类的函数,特征是: ...

  9. [Jobdu] 题目1545:奇怪的连通图

    题目描述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1可以与节点n连通. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1 <= n <= 100 ...

  10. .NET Remoting中的通道注册

    今天我的同事使用Remoting注册一个新通道.奇怪的是,通道始终无法注册,总是报告异常“该通道已被占用”.我明白这个异常出现的原因,但不明白的是此时系统并未使用任何一个通道,为何会有这个异常呢?即使 ...