写点什么

PySpark RDD 基础运算和操作总结

用户头像
是老郭啊
关注
发布于: 2020 年 08 月 23 日
PySpark RDD 基础运算和操作总结

1.初始化 spark 入口

conf = SparkConf().setAppName("myFristProject").setMaster("local[*]") . #spark 配置

sc = SparkContext()



2.创建 rdd的两种常见办法:

parallelize():

rdd1 = sc.parallelize([1,2,3,4,5])

textfile():

rdd2 = sc.textFile("test.log")

3.运算

(皆产生新的 RDD,且直保存运算逻辑,依赖原始 rdd)

1.map:

rdd1.map(lambda x:x*2)

2.filter:

rdd1.map(lambda x:x<1)

3.distinct(): 去重

rdd1.distinct()

4.randomSplit(): 按照比例随机切分成多个 rdd

rdd1.randomSplit([0.6,0.4]) # 若有10个数据,则随机分成两个 rdd,权重越高划分得到的元素较多的几率就越大

5.groupBy: 按照匿名函数规则将数据分组为多个 array,已不再是 rdd格式,若需要转化为 rdd,需要重新手动创建 rdd
6.union 并集运算:
7.intersection 交集运算:
8.subtract 差集运算:
9.cartesian 笛卡尔积运算:



4.Action

fitst() 读取第一条数据
take(num) 读取前 num条数据
takeOrdered(num) 升序读取前 num条数据
takeOrdered(num,lambda x:-x) 降序读取前 num条数据
stats() 统计个数,平均值,方差,最大值,最小值

5.key-value 基本转化

本质还是一个个二元组

kvRDD1 = sc.parallelize([(3,4),(3,6),(5,6),(1,2)])
kvRDD1.keys() 生成 keys RDD
kvRDD1.values() 生成 values RDD
kvRDD1.fiter(lambda x:x[0]<5) 根据 key过滤
kvRDD1.filter(lambda x:x[1]<5) 根据值过滤
kvRDD1.mapValues(lambda x:x**2) 值 map
kvRDD1.sortByKey() #根据 key排序, 默认升序, False为降序
kvRDD1.reduceByKey(lambda x,y:x+y) #合并相同 key值的数据 如 kvRDD1 中有 两个 key为 3的,他会将两个值相加合并
kvRDD1.countByKey() 统计各个 key对应的数据条数
kvRDD1.lookup(3) 查找 key为 3的 value 列表

6.key-value 多转换

kvRDD2 = sc.parallelize([(3,8)])
kvRDD1.join(kvRDD2) 生成内链接 rdd
kvRDD1.leftOuterJoin(kvRDD2) 生成左外链接 rdd
kvRDD1.rightOuterJoin(kvRDD2) 生成右外连接 rdd

7.持久化

kvRDD1.persist()
kvRDD1.cache()
kvRDD1.checkpoint()

三者的区别目前作者仍无法非常清晰的区分,希望各位点评,或者关注日后我会将三者的关系和区别总结单独开篇。



发布于: 2020 年 08 月 23 日阅读数: 56
用户头像

是老郭啊

关注

一位头发日渐稀疏的 90后 IT男 2020.04.07 加入

当你焦虑大于努力时,你将沦为焦虑本身。

评论

发布
暂无评论
PySpark RDD 基础运算和操作总结