pyspark
是一个用于大规模数据处理的python库,能够利用Spark分布式计算引擎的强大能力(如内存计算、容错性),用来读取海量数据(TB/PB级),从而进行数据清洗、转换、聚合、机器学习等操作,一般用于电商数据分析,用户行为模式分析,网站点击流分析等
弹性分布式数据集(RDD)
定义
RDD是Spark中的基本抽象(即对象),表示一个不可变的、可并行作的元素分区集合,其名字代表了其拥有的特点:分布式(数据被分割成多个分区,分布在集群的不同节点上),弹性(数据丢失时可以自动重建),不可变(一旦创建就不能修改,只能通过转换生成新的 RDD),内存计算(尽可能将数据保存在内存中加速计算),简单来说就是就像是一个分布式的、只读的、自动备份的数组,分布在多台机器上
常用函数
-
partitionBy() : 根据指定的分区器(Partitioner)对键值对 RDD 重新分区
-
repartition():通过 Shuffle 重新分布数据,增加或减少分区数
-
coalesce():减少分区数(分区就是将文件拆分为多少个小块,指的是要执行的任务数)
-
randomSplit(): 按指定权重随机将RDD拆分为多个RDD
-
map():输入与输出一一对应,只改变元素的值,不改变数量
-
flatmap():与map相比,一个输入可以产生多个输出
transformation与action
transformation:能够构建数据处理流水线,比如解析,特征提取,计算统计等,且spark能够自动优化其链条,比如合并相邻的filter,调整执行顺序等 action:可以理解为transformation的执行者,两者可以说前者是计划的构建,后者负责计划的实施,不过注意action会触发之前所有的transformation,需要仔细构建逻辑。
键值对RDD
键值对RDD:处理成对的(key, value)数据,支持按键聚合、连接、分组等高级操作,能做分区器,数据本地性优化等性能优化 当有多个键值对RDD时,一般会通过连接(join)和协同分组,从而能够基于相同的键进行交互