zoukankan      html  css  js  c++  java
  • R语言--saprkR基本使用

    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基本使用

  • 相关阅读:
    注册表命令大全(二)
    让电脑定时关机
    NSIS nsDialogs 插件
    poj_1562Oil Deposits
    hdoj_1342Lotto
    VS 生成事件文件拷贝
    poj_1111Image Perimeters
    模拟求解迷宫问题(DFS+BFS)
    VS2010如何为所有工程配置环境
    POJ 并查集 题目汇总 ——czyuan原创
  • 原文地址:https://www.cnblogs.com/awishfullyway/p/6478611.html
Copyright © 2011-2022 走看看