spark---RDD (三)

RDD

RDD就是一个集合,在使用的时候,就当做为Scala 集合类中List列表
实质
分布式存储数据集合
abstract class RDD [T:ClassTag]
A Resilient(弹性)  Distributed(分布式) Dataset(RDD)
Represents(代表) an immutable(不可变) partitoned(分区) collection of elements that can be operated(处理) on in parallel(并行)
-------------------------------------------------------------------------------------------
将数据划分为很多分区(partitioned),不同分区的数据存在在不同的机器里面,每个分区的数据可以被一个Task进程处理分析
This class contains the basic operations available on all RDDs, such as `map`, `filter`, and `persist`
所有的RDD都是一些基本的操作,比如map, fifter,persist
PairRDDFunctions contains operations available only on RDDs of key-value pairs, such as `groupByKey` and `join`;
RDD中的类型是键值对(二元组),RDD隐式转换 PairRDDFunctions,PairRDDFunctions方法我们就可以用,比如有groupByKey,reduceByKey,join
* Internally, each RDD is characterized by five main properties:
* -A list of partitions 分区列表
* -A function for computing each split 每一个分片可以被一个函数处理(并行)
 *  - A list of dependencies on other RDDs 
	一个RDD依赖于其他RDD(RDD怎么来)
	查看依赖
println(wordCountRDD.toDebugString)
 *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that 	the RDD is hash-partitioned)
可选,如果RDD的值是二元组,你可以指定分区
*  - Optionally, a list of preferred(最优) locations to compute each split on (e.g. block locations for an HDFS file)
可选,最优的路径中读取分片数据

RDD 创建方式

在这里插入图片描述
在这里插入图片描述

RDD中函数的分类

转换函数 Tansformation
一个RDD调用函数之后 转换为另外一个RDD
map filter reducBykey
action 函数
一个RDD调用函数之后,不会转换为一个RDD,触发一个Job的执行
比如:
	count->Long
	first->第一条数据
	take->获取前几条数据
	top->获取前几条数据(排序)
	foreach->打印所有的数据
	saveAsTextFile->保存数据到文件
持久化 persisitent

def persist(newLevel:StorageLevel)
def unpersist(blocking:Boolean = true)

class StorageLevel private(
	private var _useDisk:Boolean,//磁盘
	private var _useMemory:Boolean,//内存
	//JVM内存中tachyon(基于内存的分布式文件系统)
	private var _useOffHeap:Boolean,
	private var _deserializde:Boolean,//反序列化
	prvate var _replication:Int = 1) //副本个数
extends Externalizable

RDD 数据的持久化

1)某个RDD数据,被多次使用
重复RDD
2)某个RDD数据来之不易,使用超过一次
经过复杂的处理得到RDD
3)通常选择的策略
MEMORY_ONLY_2  -如果内存足够
MEMORY_AND_DISK_SER_2  -如果内存不够,先内存后磁盘

补充

数据结构RDD(类比于Scala中List)
	数据储存在内存中,分区存储(partition)
	对数据的处理:调用集合中高阶函数
	shuffle
		Rdd直接是有依赖的
			宽依赖:产生shuffle ,数据会存储在磁盘中
					reduceByKey , groupByKey
			窄依赖:不会产生shuffle
				map, filter , union
这里所讲的shuffle 和我们的MapReduce的shuffle的过程,前面的Task数据将会被打乱,在分发给下一个stage 的各个Task进程处理

spark分析数据3步走

1.读取数据

val inputRDD = sc.textFile  (SparkContext)

val inputDF = spark.read.textFile //spark 2.X SparkSession

2.分析数据

	inputRDD. Transformation
	调用转换函数Transformation函数,都是高级函数
	groupby,map,reduceByKey,filter,groupbyKey,flatMap,reduce,sorted,
	distinct,union,join

3.结果输出

	resultRDD.action
		调用动作函数,调用以后不会返回一个RDD,触发一个job执行
第一类action函数:有返回值
			返回值,返回给Driver
			top、take、first、count、collect
第二类Action函数:无返回值
			没有返回值,直接将数据存储到外部文件系统中或者直接控制打印
				foreach\saveAsTextFile
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值