Spark02基本操作

Spark基本操作
##读<<Python大数据处理库PySpark实战>>总结

1,Spark对内存数据的抽象,即为RDD,RDD是一种分布式,多分区,只读的数组
Spark可以将HDFS块文件转换成RDD,也可以由一个或多个RDD转换成新的RDD
PySpark首先利用Python创建Spark Context对象,用Socket与JVM上的Spark Context通信,这个过程借助Py4J库
JVM上的Spark Context负责与集群上的Spark Worker节点进行交互

2,
常用的Transformation操作及其描述如下:
map:返回与源RDD元素一一对应的新RDD(并行)
filter: 根据定义规则对RDD中元素过滤,返回结果为true的元素新RDD(并行)
flatMap: map和flatten的组合操作,与map函数相似,不过map函数返回的新RDD包含的元素可能是嵌套类型
mapPartitions:作用每个分区,参数为每个分区的迭代器,返回值为每个分区处理之后新的迭代器,该函数会作用分区中的每一个元素
mapPartitionsWithIndex:与mapPartitions函数相同,参数需要传入两个,第一个参数为分区的索引,按分区的索引处理分区中元素
Union:将两个RDD进行合并(不去重)
Intersection:对两个RDD进行取交集,返回无重复元素的RDD
Distinct:对RDD中元素去重
groupByKey:对K-V类型的RDD中按Key分组,将相同Key的元素聚集到同一个分区内,此函数不能接受函数作为参数,只接受一个可选参数,即任务数
reduceByKey:对K-V类型的RDD按Key分组,接受两个参数,第一个参数为处理函数,第二个参数为可选参数,用于设置reduce的任务数,
reduceByKey函数能够在RDD分区本地提前进行聚合运算,有效减少shuffle过程传输的数据量,相对于groupByKey函数更简洁高效
aggregateByKey:对K-V类型的RDD按Key分组进行reduce计算,可接受三个参数,第一个参数是初始化值,第二个参数是分区内处理函数,第三个参数是分区间处理函数
sortByKey:对K-V类型的RDD内部元素按照Key进行排序,排序过程会涉及Shuffle操作
join:对K-V类型的RDD进行关联操作,它只能处理两个RDD之间的关联,超过两个RDD关联需要多次使用join函数,join操作只会关联出具有相同Key的元素,相当于SQL语句中的inner join
cogroup:对K-V类型的RDD进行关联,cogroup在处理多个RDD的关联上比join更加优雅,它可以同时传入多个RDD作为参数进行关联,
coalesce:对RDD重新分区,将RDD中的分区数减小到参数numPartitions个,不会产生shuffle,在较大的数据集中使用filer等过滤操作后可能会产生多个大小不等的中间结果数据文件,
重新分区并减小分区可以提高作业的执行效率,是Spark中常用的一种优化手段
repartition :对RDD重新分区,接受一个参数,即numPartitions分区数,它是coalesce函数设置shuffle为true的一种实现形式
常用的Action操作及其描述如下:
reduce:处理RDD两两之间元素的聚集操作
collect:返回RDD中所有数据元素
Count:返回RDD中元素个数
First:返回RDD中的第一个元素
Take:返回RDD中的前N个元素
saveAsTextFile:将RDD写入文本文件,保存至本地文件系统或者HDFS中
saveAsSequenceFile:将K-V类型的RDD写入Sequence File文件,保存至本地文件系统或者HDFS中
countByKey:返回K-V类型的RDD,这个RDD中数据为每个Key包含的元素个数
Foreach:遍历RDD中所有元素,接受参数为一个函数,常用操作是传入println函数打印所有元素

3,RDD缓存
在PySpark中,RDD可以缓存到内存或者磁盘上,提供缓存的主要目的是减少同一数据集被多次使用的网络传输次数,提高PySpark 的计算性能,
PySpark提供对RDD的多种缓存级别,并且RDD的缓存具有容错性,如果有分区丢失可以通过系统自动重新计算
在代码中可以使用persist()方法或cache()方法缓存RDD,
cache()方法默认将RDD缓存到内存中,cache()方法和persist()方法都可以用unpersist()方法来取消RDD缓存

Spark各缓存级别及其描述:
MEMORY_ONLY: RDD仅缓存一份到内存,此为默认级别
MEMORY_ONLY_2:将RDD分别缓存在集群的两个节点上,RDD在集群内存中保存两份
MEMORY_ONLY_SER:将RDD以Java序列化对象的方式缓存到内存中,减少RDD在内存占用空间,读取时消耗更多CPU资源
DISK_ONLY: RDD仅缓存一份到磁盘
MEMORY_AND_DISK: RDD仅缓存一份到内存,当内存中空间不足时,会将部分RDD分区缓存到磁盘
MEMORY_AND_DISK_2:将RDD分别缓存在集群的两个节点上, 当内存中空间不足时,会将部分RDD分区缓存到磁盘,RDD在集群内存中保存两份
MEMORY_AND_DISK_SER:将RDD以Java序列化对象的方式缓存到内存中,当内存中空间不足时,会将部分RDD分区缓存到磁盘,减少RDD在内存占用空间,读取时消耗更多CPU资源
OFF_HEAP:将RDD以序列化的方式缓存到JVM之外的存储空间中,与其他缓存模式相比,减少了JVM垃圾回收开销

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值