1、RDD基础

Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在分区的不同节点上。

用户可以通过两种方式创建RDD:

(1)读取外部数据集====》 sc.textFile(inputfile)

(2)驱动器程序中对一个集合进行并行化===》sc.parallelize(List(“pandas”,”I like pandas”))

2、RDD操作

转化(Transformations)行动*(Actions)操作

(1):转化操作

RDD 经过转化返回一个新的RDD,转化出来的RDD是惰性求值的,只有在行动操作才会进行计算的。

常见的转换操作如下图:



(2):行动操作

对数据集进行实际的计算,这最终求得的结果返回驱动器程序中,或者写入外部程序中。

下表列出了一些 Spark 常用的 actions 操作

简单worldcount操作实现

object WordCountScala {
def main(args: Array[String]): Unit = {
//创建Spark配置对象
val conf = new SparkConf();
conf.setAppName("WordCountScala")
//设置master属性
//conf.setMaster("local");
conf.setMaster("local[*]")
//通过conf创建sc
val sc = new SparkContext(conf);
print("hello world");
//加载文本文件
val rdd1 = sc.textFile("F:/spark/b.txt");
//压扁
val rdd2 = rdd1.flatMap(line => {
println("map :"+line)
line.split(" ")
}) ;
//映射w => (w,1)
val rdd3 = rdd2.map(word=>{
println("map :"+word)
(word,1)
})
val rdd4 = rdd3.reduceByKey(_ + _)
val r = rdd4.collect()
r.foreach(println)
}
}

3、RDD的持久化

因为Spark RDD是惰性求值的,有时候我们希望能够多次使用同一个RDD。如果简单的对RDD调用行动操作,Spark会重算RDD以及它的所有的依赖。造成算法的开销很大。处于不同的目的,我们可以为RDD选择不同的持久化级别。RDD 可以使用 persist() 方法或 cache() 方法进行持久化。数据将会在第一次 action 操作时进行计算,并缓存在节点的内存中。Spark 的缓存具有容错机制,如果一个缓存的 RDD 的某个分区丢失了,Spark 将按照原来的计算过程,自动重新计算并进行缓存。默认的存储级别是 StorageLevel.MEMORY_ONLY(将反序列化的对象存储到内存中) ,如果您想手动删除 RDD 而不是等待它掉出缓存,使用 RDD.unpersist() 方法。

例如: Scala中的两次执行

val  result=input.map(x=>x*x)
result.persist(StorageLevel.DISK_ONLY)
println(result.count())
println(result.collect().mkString(","))

最新文章

  1. 2016NOIP总结
  2. sql优化阶段性总结以及反思
  3. Java对文件及文件夹的操作
  4. Android IOS WebRTC 音视频开发总结(三六)-- easyRTC介绍
  5. POJ 1915
  6. git 版本控制系统初学
  7. PHP基本语法(二)
  8. 使用bat批处理命令打包maven项目
  9. c语言中的字符数组与字符串
  10. Solr/SolrCloud -error
  11. 《JS权威指南学习总结--1.2客户端JS》
  12. Scala关于软件的安装
  13. Linux shell 脚本(三)
  14. [蓝桥杯]PREV-27.历届试题_蚂蚁感冒
  15. [JVM-2]常用JVM命令参数
  16. asp.net webapi 404/或无效控制器/或无效请求 截取处理统一输出格式
  17. MySQL 数据类型对比:char 与 varchar;varchar 与 text;datetime 与 timestamp;blob 与 text;
  18. java多线程框架
  19. 在PE32位下安装64位2003、2008系统
  20. b6

热门文章

  1. hdu 1027 Ignatius and the Princess II(正、逆康托)
  2. $.ajax、$.get和$.post方法成功,完成请求,错误或失败的回调
  3. 第39篇-Java通过JNI调用C/C++函数
  4. (数据科学学习手札130)利用geopandas快捷绘制在线地图
  5. uni-app nvue页面动态修改导航栏按钮
  6. SpringCloud微服务实战——搭建企业级开发框架(十七):Sentinel+Nacos配置持久化
  7. centos7.1使用kubeadm部署kubernetes 1.16.2的master高可用
  8. Asp.net core自定义依赖注入容器,替换自带容器
  9. [cf700D]Huffman Coding on Segment
  10. [loj6271]生成树求和