spark学习心得

一、spark特点
1.离线批处理(利用内核)
2.交互式査询
3.实时计算
4.算法建模

二、Spark核心数据结构-RDD(弹性分布式数据集)
初学时,你可以把RDD看做是一种特殊的集合类型,比如Array或List 但是RDD这种集合类型比较特殊:
①RDD有分区机制
②RDD有容错机制,即RDD数据丢失可以恢复
分区:
分区机制的目的是可以分布式(并行)的处理一个集合的数据,所以可以极大提高处理效率

三、创建RDD的两种途径:
(1)可以将一个普通的集合(Array或List)转变为RDD
val rdd1=sc. parallelize(a1, 2)(sc是spark的入口类)
査看分区数:scala> rdd1.partitions.size
査看每个分区情况:scala> rdd1.glom.collect
返回整个RDD数据:scala> rdd1.collect
如何操作RDD ?对于scala集合的方法都可以用于RDD,比如map, filter 等
(2)可以通过读取外部的存储系统(HDFS,S3,本地磁盘文件…) 的文件, 把文件数据转变为RDD
例如,先在/home下创建1.txt,可以写入几条ip数据
scala> val r1=sc.textFile(“file:///home/1.txt”,2)
scala> val r2=sc.textFile(“hdfs://hadoop01:9000/1.txt”,2)

四、宽依赖与窄依赖
1.窄依赖
特点:父分区和子分区是一对一关系
会产生窄依赖的典型懒方法:

  1. map 2. flatMap 3. filter 等
    窄依赖可以认为仅是简单将父分区数据根据转换规则进行转换,并不涉及其他复杂 的分区操作。
    窄依赖不会产生shuffle,没有磁盘1/0。所以执行效率很高。此外,如果DAG存在多个连续的窄依赖,Spark底层会执行优化,将多个连续的窄依赖放到一起执行,从而进一步提高执行效率。这种优化方式称为流水线优化。
    2.宽依赖
    特点:父分区和子分区是一对多关系
    会产生宽依赖的典型懒方法:
  2. groupBy 2. groupByKey 3. reduceByKey
    记忆技巧:凡是产生分组类型的懒操作,产生的依赖一定是宽依赖
    宽依赖会产生shuffle过程,即按照某种分组条件或聚合规则,将数据发送到正确的分区。因为在此过程中,数据量很大,并且会分散到很多服务器上,如果完全基于内存来处理肯定不够,所以会发生多次的磁盘溢写过程,即会发生磁盘1/0(因为要生成中间的临时结果文件)。
    此外,如果不将结果存在临时文件,一旦分区数据丢失,恢复代价可能很大(最糟糕情况可能要重算所有父分区数据)
    综上,Spark框架是有shuffle过程的,但是Spark已经尽量避免产生Shuffle (窄依赖没有shuffle)从而提高执行效率。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值