Spark_RDD之RDD操作简介
1.转化操作
转化操作是返回一个新的RDD的操作,我们可以使用filter()方法进行转化。举个使用scala进行转化操作的例子。
def main(args: Array[String]): Unit = { val conf = new SparkConf(); conf.setAppName("trans"); conf.setMaster("local"); //SparkContext对象代表对Spark集群的一个连接 val sc = new SparkContext (conf); val inputRdd = sc.textFile("E:\\file\\word.txt"); //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串 val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun")); println(daijunRdd.countByValue()); }
其对应的Java代码如下:
public static void main(String[] args) { SparkConf conf = new SparkConf(); conf.setAppName("trans"); conf.setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt"); JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() { private static final long serialVersionUID = 1L; public Boolean call(String x) throws Exception { return x.contains("daijun"); } }); System.out.println(daijunRdd.countByValue().toString()); sc.close(); }
2.行动操作
行动操作时对RDD进行实际的计算的操作,产生实际的输出。在以上的基础上,举一个行动操作的例子,我们使用count()方法来取得我们想要的单词的个数。
scala代码:
def main(args: Array[String]): Unit = { val conf = new SparkConf(); conf.setAppName("trans"); conf.setMaster("local"); //SparkContext对象代表对Spark集群的一个连接 val sc = new SparkContext(conf); val inputRdd = sc.textFile("E:\\file\\word.txt"); //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串 val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun")); //使用count()方法 返回计数结果 println(daijunRdd.count()); daijunRdd.take(2).foreach(println); }
Java代码
public static void main(String[] args) { SparkConf conf = new SparkConf(); conf.setAppName("trans"); conf.setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt"); //JavaRDD<String> daijunRdd = rdd.filter(s -> s.contains("daijun")); JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() { private static final long serialVersionUID = 1L; public Boolean call(String x) throws Exception { return x.contains("daijun"); } }); System.out.println(daijunRdd.count()); for(String line: daijunRdd.take(2)){ System.out.println(line); } sc.close(); }
note:在调用一个新的行动操作时,RDD都会从头计算,会使效率低下。要避免这种行为,可以将RDD持久化。
3.惰性求值
意思是在RDD进行行动操作之前Spark不会开始计算。在进行转化操作时,Spark会记录相关操作的信息,在需要时才会去执行它。
Spark_RDD之RDD操作简介的更多相关文章
- Spark中的RDD操作简介
map(func) 对数据集中的元素逐一处理,变为新的元素,但一个输入元素只能有一个输出元素 scala> pairData.collect() res6: Array[Int] = Array ...
- Spark学习(一)--RDD操作
标签(空格分隔): 学习笔记 Spark编程模型的两种抽象:RDD(Resilient Distributed Dataset)和两种共享变量(支持并行计算的广播变量和累加器). RDD RDD是一种 ...
- RDD操作
RDD操作 1.对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作 函数名 目的 示例 结果 map() 函数应用于RDD中的每个元素 rdd.map(x=>x+1) {2,3,4, ...
- Spark编程模型及RDD操作
转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...
- Spark 键值对RDD操作
键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...
- SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介
SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...
- Spark_RDD之RDD基础
1.什么是RDD RDD(resilient distributed dataset)弹性分布式数据集,每一个RDD都被分为多个分区,分布在集群的不同节点上. 2.RDD的操作 Spark对于数据的操 ...
- SPARKR,对RDD操作的介绍
(转载)SPARKR,对RDD操作的介绍 原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...
- spark RDD操作的底层实现原理
RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常.闭包函数传入到节点时,需要经过下面的步 ...
随机推荐
- Android Studio在华为真机上运行无法输出Debug日志解决
这主要与华为手机本身的权限设置有关,解决办法请看链接地址 链接地址: https://blog.csdn.net/seafishyls/article/details/52198814
- 置顶博客一览表($My~Top~List$)
咳,主要是因为我觉得置顶博客太多了让人很晕233 以下是(伪)置顶的博客: 笙上月 \(\color{red}{Link}\) 笔下梅 \(\color{red}{Link}\) 老年\(OIer\) ...
- python:利用smtplib模块发送邮件
自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 参考代码:send_mail.py 一.python对 ...
- 格式化angularjs日期'/Date(-62135596800000)/'
在实现在angularjs时,发现经序列化后的日期需要格式化显示. 翻看以前的博客,似乎有写过一篇有关js方面的解决办法<格式化json日期'/Date(-62135596800000)/'&g ...
- C#批量插入数据到Sqlserver中的四种方式 - 转
先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...
- REST-framework快速构建API--源码解析
一.APIView 通过APIView实现API的过程如下: urls.py url(r'^books/$', views.BookView.as_view(),name="books&qu ...
- Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...
- vs2017+opencv4.0.1安装配置详解(win10)
一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...
- C++STL——优先队列
一.相关定义 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这 ...
- Final 个人最终作业。
1.对软件工程M1/M2做一个总结 在M1阶段,我在C705组.M1阶段我与黄漠源同学结对,一起完成提取关键词算法的优化.最初我们一起测试提取关键词算法功能的实现效果,随后我主要负责从网络上搜寻并整理 ...