Spark的认识(二)

Spark的认识(二)

1、主要内容

  • 1、掌握RDD底层原理

  • 2、掌握RDD常用的算子操作

  • 3、掌握RDD的依赖关系

  • 4、掌握RDD的缓存机制

  • 5、掌握划分stage

  • 6、掌握spark任务调度流程

2、RDD概述

2.1 RDD是什么

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。
​
Dataset:它就是一个集合,集合里面可以存放很多个元素
Distributed:它的数据是分布式存储的,方便于后期进行分布式计算
Resilient:弹性 它表示的含义:rdd的数据是可以保存在内存或者是磁盘中

2.2 RDD的五大属性

(1) A list of partitions
   一个分区列表,也就是说一个rdd有很多个分区,分区里面才是真正的数据,而spark任务的执行是以分区为单位,一个分区就对应后期的一个task(线程)。
   读取HDFS上数据文件产生的RDD分区数跟block的个数相等,
   如果一个文件只有一个block块,它会产生的rdd的分区数是2个(默认最小值就是2)
​
(2) A function for computing each split
  作用在每一个分区中的函数
  val rdd2=rdd1.map(x=>(x,1))
​
(3) A list of dependencies on other RDDs
  一个rdd会依赖于其他多个rdd,这里就涉及到rdd与rdd之间的依赖关系,后期spark的容错机制就是根据这个特性而来。
​
(4) Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
(可选项)对于kv类型的rdd才有分区函数概念(必须要产生shuffle),不是kv类型的RDD它的分区函数是None(就是没有)。分区函数作用:决定了数据会流入到哪里去
​
spark中有2种分区函数,第一种是基于哈希的hashPartitioner, key.hashcode%分区数=分区号,这个分区函数是默认值。第二种基于范围RangePartitioner
​
​
(5) Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
(可选项)一组最优的块的位置列表  表示数据的本地性和数据位置最优
spark在进行任务分配的时候,它会优先考虑存有数据的节点来计算任务。避免出现大量的网络请求。

3、创建RDD

  • 1、通过一个已经存在scala集合去创建

    • sc.parallelize(List(1,2,3,4))

  • 2、读取外部数据源去创建

    • val rdd1=sc.textFile("/words.txt")

  • 3、通过一个rdd调用对应的方法生成一个新的rdd

    • val rdd2=rdd1.flatMap(_.split(" "))

4、RDD的算子分类

  • 1、transformation(转换)

    • 可以把一个rdd转换生成一个新的rdd,它是延迟加载,不会立即触发整个任务的运行

    • 它会记录下rdd上面的转换操作行为

    • 比如

      • flatMap map reduceByKey sortBy

  • 2、action (动作)

    • 它会触发任务真正的运行

    • collect saveAsTextFile

 

5、通过spark实现点击流日志分析

5.1 统计PV

package demo
​
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
​
//TODO:通过spark来实现点击流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值