Spark学习笔记1-RDD编程
来源:互联网 发布:java线程状态 编辑:程序博客网 时间:2024/05/24 06:01
因为Spark本身是由Scala编写的,故文中仅以Scala API为例,python和java的API暂时不举例
1、RDD基础
Spark中的RDD ( Resilient Distributed Dataset ) 是一个不可变的分布式对象集合,也称为弹性分布式数据集。在Spark中对数据的操作无非是创建RDD,转化已有RDD,以及调用RDD操作进行求值。
2、RDD创建
创建RDD有两种方法:读取一个外部数据集,或者在驱动器程序里对一个集合(list,set)进行并行化
// 读取外部数据集,用Scala中的textFile()方法val line = sc.textFile("/path/test.txt")
// 在驱动器程序里对一个集合(list,set)进行并行化val lines = sc.parallelize(List("spark","i love scala"))
3、RDD操作
RDD的操作包括两种:转化操作和行动操作
3.1 转化操作
RDD的转化操作是返回新RDD的操作,比如map(),filter()。转化出来的RDD是惰性求值的,只有在行动操作中用到这些RDD才会被计算。
例1: 假如我们要对日志文件,X.log里的信息进行筛选,选出包含error的信息,我们可以这样做
// filter()转化操作val lines = sc.textFile("X.log")val errRDD = lines.filter(line => line.contains("error"))
3.2 行动操作
行动操作会把最终求得的结果返回到驱动器程序,或者写入外部存储系统中。
还是用之前日志的例子,我们向输出日志里有多少行error,并且输出前十行error
println("Log has " + errRDD.count().toString + "errors")println("Here are 10 examples: ")errRDD.take(10).foreach(println)
注: 当数据集小的时候,可以用collect()方法把数据放在内存里,但是绝大多数情况下,rdd数据集都比较大,不能用collect()方法。
4、常见的转化操作和行动操作
转化操作
4.1 map()操作
// 计算RDD中各值的平方val input = sc.textFile(List(1,2,3,4))val result = input.map(x => x*x)println(result.collect().maString(","))
4.2 flatMap( )操作:对每个输入元素生成多个输出元素
// flatMap()将行数据切分为单次val lines = sc.parallelize(List("hello word","hi"))val words = lines.flatMap(x => x.split(" "))words.first() // 返回hello
4.3 filter( )操作:过滤
rdd.filter(x => x!=1)
4.4 distinct( )操作:去重
rdd.distinct()
4.5 sample( )操作:采样以及是否替换
rdd.sample(false,o.5)
4.6 union( )操作:合并两个RDD
rdd1.union(rdd2)
4.7 interaction( )操作:两个RDD求交集
rdd1.interaction(rdd2)
4.8 substract( )操作:移除一个RDD中的内容
rdd.substract(other)
4.9 cartesian( )操作:与另一个RDD的笛卡尔积
rdd1.cartesian(rdd2)
行动操作
4.10 reduce( )操作
// 对RDD中的数据求和val data = sc.parallelize(List(1,2,3,4))val sumData = data.reduce((x,y) => x+y)
4.10 aggregate( )操作
// 用aggregate()操作来计算RDD的平均值val result = input.aggregate((0,0))( (acc,value) => (acc._1 + value, acc._2 + 1) (part1,part2) => (part1._1 + part2._1 ,part1._2 + part2._2))val avg = result._1/result._2.toDouble
4.11 count( )操作:返回RDD中元素个数
rdd.count()
4.12 countByValue( )操作:各元素在RDD中出现的次数
rdd.countByValue()
4.13 take( )操作:从RDD中返回num个元素
rdd.take(2)
4.14 top( )操作:从RDD中返回前num个元素
rdd.top(num)
4.15 takeOrdered(num)(ordering)操作:从RDD中按照提供的顺序返回最前面的num个元素
rdd.takeOrdered(2)(myOrdering)
4.16 takeSample( )操作:从RDD中返回任意一些元素
rdd.takeSample(false,1)
4.17 foreach( )操作:对RDD的每个元素都使用给定的函数
rdd.foreach(func)
- Spark学习笔记1-RDD编程
- Spark学习笔记(一)--RDD编程
- Spark学习笔记2:RDD编程
- Spark学习笔记2:RDD编程
- Spark学习-RDD编程基础
- Spark学习—RDD编程
- Spark学习笔记二 RDD
- spark RDD解密学习笔记
- Spark学习笔记 --- RDD详解
- Spark学习笔记 --- 什么是RDD
- 【spark RDD】RDD编程
- Spark学习笔记 --- spark RDD加载文件
- Spark学习之RDD编程(2)
- Spark学习之三-RDD编程
- RDD Dependency详解---Spark学习笔记9
- Spark学习笔记之<RDD原理>
- Spark学习笔记三(RDD常用操作)
- Spark学习笔记四(RDD Persistency)
- Nginx 做JavaWeb负载均衡
- 微服务架构中模块划分和服务识别
- 微信小程序一个你可能需要的功能
- Arduino语音天气预报(一)
- Windowing Functions In Hive
- Spark学习笔记1-RDD编程
- 信数金服决策引擎分享(三):如何实现决策的协同维护?
- 移动web(三)touch事件详解
- C语言实现动态顺序表
- 两个人聪明人的空城——《司马懿之虎啸龙吟》
- 学习笔记—bootstrap(2)
- HTTP方法
- Long类型转String JS丢失
- netty获取ip