SparkR(R on Spark)编程指南 含 dataframe操作
SparkR(R on Spark)编程指南
文章目录
概论
SparkR是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark。在Spark 1.4中,SparkR实现了分布式的data frame,支持类似查询、过滤以及聚合的操作(类似于R中的data frames:dplyr),但是这个可以操作大规模的数据集。
SparkR DataFrames
DataFrame是数据组织成一个带有列名称的分布式数据集。在概念上和关系型数据库中的表类似,或者和R语言中的data frame类似,但是这个提供了很多的优化措施。构造DataFrame的方式有很多:可以通过结构化文件中构造;可以通过Hive中的表构造;可以通过外部数据库构造或者是通过现有R的data frame构造等等。

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

如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
创建DataFrames
如果有SQLContext实例,那么应用程序就可以通过本地的R data frame(或者是Hive表;或者是其他数据源)来创建DataFrames。下面将详细地介绍。
通过本地data frame构造
最简单地创建DataFrames是将R的data frame转换成SparkR DataFrames,我们可以通过createDataFrame来创建,并传入本地R的data frame以此来创建SparkR DataFrames,下面例子就是这种方法:
df <- createDataFrame(sqlContext, faithful) # Displays the content of the DataFrame to stdouthead(df)## eruptions waiting##1 3.600 79##2 1.800 54##3 3.333 74 |
通过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, "./examples/src/main/resources/people.json", "json")head(people)## age name##1 NA Michael##2 30 Andy##3 19 Justin# SparkR automatically infers the schema from the JSON fileprintSchema(people)# root# |-- age: integer (nullable = true)# |-- name: string (nullable = true) |
Data sources API还可以将DataFrames保存成多种的文件格式,比如我们可以通过write.df将上面的DataFrame保存成Parquet文件:
write.df(people, path="people.parquet", source="parquet", mode="overwrite") |
通过Hive tables构造
我们也可以通过Hive表来创建SparkR DataFrames,为了达到这个目的,我们需要创建HiveContext,因为我们可以通过它来访问Hive MetaStore中的表。注意,Spark内置就对Hive提供了支持,SQLContext和HiveContext 的区别可以参见SQL编程指南。
# sc is an existing SparkContext.hiveContext <- sparkRHive.init(sc)sql(hiveContext, "CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")sql(hiveContext, "LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")# Queries can be expressed in HiveQL.results <- hiveContext.sql("FROM src SELECT key, value")# results is now a DataFramehead(results)## key value## 1 238 val_238## 2 86 val_86## 3 311 val_311 |
DataFrame的相关操作
SparkR DataFrames中提供了大量操作结构化数据的函数,这里仅仅列出其中一小部分,详细的API可以参见SparkR编程的API文档。
选择行和列
# Create the DataFramedf <- createDataFrame(sqlContext, faithful) # Get basic information about the DataFramedf## DataFrame[eruptions:double, waiting:double]# Select only the "eruptions" columnhead(select(df, df$eruptions))## eruptions##1 3.600##2 1.800##3 3.333# You can also pass in column name as strings head(select(df, "eruptions"))# Filter the DataFrame to only retain rows with wait times shorter than 50 minshead(filter(df, df$waiting < 50))## eruptions waiting##1 1.750 47##2 1.750 47##3 1.867 48 |
Grouping和Aggregation
# We use the `n` operator to count the number of times each waiting time appearshead(summarize(groupBy(df, df$waiting), count = n(df$waiting)))## waiting count##1 81 13##2 60 6##3 68 1# We can also sort the output from the aggregation to get the most common waiting timeswaiting_counts <- summarize(groupBy(df, df$waiting), count = n(df$waiting))head(arrange(waiting_counts, desc(waiting_counts$count)))## waiting count##1 78 15##2 83 14##3 81 13 |
列上面的操作
SparkR提供了大量的函数用于直接对列进行数据处理的操作。
# Convert waiting time from hours to seconds.# Note that we can assign this to a new column in the same DataFramedf$waiting_secs <- df$waiting * 60head(df)## eruptions waiting waiting_secs##1 3.600 79 4740##2 1.800 54 3240##3 3.333 74 4440 |
在SparkR中运行SQL查询
SparkR DataFrame也可以在Spark SQL中注册成临时表。将DataFrame 注册成表可以允许我们在数据集上运行SQL查询。sql函数可以使得我们直接运行SQL查询,而且返回的结构是DataFrame。
# Load a JSON filepeople <- read.df(sqlContext, "./examples/src/main/resources/people.json", "json")# Register this DataFrame as a table.registerTempTable(people, "people")# SQL statements can be run by using the sql methodteenagers <- sql(sqlContext, "SELECT name FROM people WHERE age >= 13 AND age <= 19")head(teenagers)## name##1 Justin |
SparkR(R on Spark)编程指南 含 dataframe操作的更多相关文章
- SparkR(R on Spark)编程指南 含 dataframe操作 2.0
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
- Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...
- Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
- Spark编程指南V1.4.0(翻译)
Spark编程指南V1.4.0 · 简单介绍 · 接入Spark · Spark初始化 · 使用Shell · 在集群上部署代码 ...
- 转-Spark编程指南
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
- Spark编程指南分享
转载自:https://www.2cto.com/kf/201604/497083.html 1.概述 在高层的角度上看,每一个Spark应用都有一个驱动程序(driver program).驱动程序 ...
- Spark官方2 ---------Spark 编程指南(1.5.0)
概述 在高层次上,每个Spark应用程序都由一个运行用户main方法的driver program组成,并在集群上执行各种 parallel operations.Spark提供的主要抽象是resil ...
- 【原】Spark 编程指南
尊重原创,注重版权,转贴请注明原文地址:http://www.cnblogs.com/vincent-hv/p/3322966.html 1.配置程序使用资源: System.setPropert ...
- Spark编程指南
1.在maven里面添加引用,spark和hdfs的客户端的. groupId = org.apache.spark artifactId = spark-core_2.9.3 version = 0 ...
随机推荐
- PhotoShop CS6实现照片背景虚化效果
在摄影实践中,虚化背景是突出主体的常用手段.但是由于消费级DC镜头的实际焦距都很短,因此实现浅景深而虚化背景的难度较大.如果我们希望用消费级DC也能达到虚化背景突出主体的效果,那么,Photoshop ...
- Android开发环境搭建篇详尽的教程实例汇
原文链接:http://android.eoe.cn/topic/android_sdk 一.android开发环境搭建图文教程整理篇: 1.Android开发环境搭建全程演示(jdk+eclip+a ...
- 【Android】1.2 创建Android模拟器
分类:C#.Android.VS2015: 创建日期:2016-01-20 调试手机应用程序一般先用模拟器来实现,只是因为每次都发布到手机上调试太麻烦了.当应用程序在模拟器上调试没错后,再发布到手机 ...
- 03.反射--01【反射机制】【反射的应用场景】【Tomcat服务器】
https://blog.csdn.net/benjaminzhang666/article/details/9408611 https://blog.csdn.net/benjaminzhang66 ...
- C#中自定义属性的例子
自定义属性的作用 有时候我们需要给一个类或者类中的成员加上一些属性或者附加信息,让类或者变量的功能更明确可控制的细粒度更高,打个简单的比方:数据库里面的一张表,表中的每一个字段都有很多属性,如是否主键 ...
- placement new (转)
原文出自:http://www.cnblogs.com/wanghetao/archive/2011/11/21/2257403.html 1. placement new的含义placement n ...
- MapReduce运行原理
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各 ...
- SecureCRT常用快捷键
Alt + B + B --打开新连接 Ctrl + A --光标移到行首 Ctrl + E --光标移到行末 Ctrl + B --光标前移一个字符 Ctrl + F --光标后移一个字符 Ctrl ...
- Kudu:支持快速分析的新型Hadoop存储系统
Kudu 是 Cloudera 开源的新型列式存储系统,是 Apache Hadoop 生态圈的新成员之一( incubating ),专门为了对快速变化的数据进行快速的分析,填补了以往 Hadoop ...
- asp.net上传大文件-请求筛选模块被配置为拒绝超过请求内容长度的请求
HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...