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()
三者的区别目前作者仍无法非常清晰的区分,希望各位点评,或者关注日后我会将三者的关系和区别总结单独开篇。
版权声明: 本文为 InfoQ 作者【是老郭啊】的原创文章。
原文链接:【http://xie.infoq.cn/article/36ef3a1b1b83a54e5d7c395c2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论