目录
使用键值对rdd的groupbykey()方法groupbykey:对具有相同键的值进行分组,可对同一组进行计数和求和等
键值对rdd的概念及作用
键值对rdd
- 键值对rdd由一组组键值对组成的
- 作用:提供了各个键或跨节点重新进行数据分组的操作接口 eg:reduceByKey()
创建键值对rdd
(1)创建普通rdd
Val rdd=dc.parallelize(
List(“this is a test”,”how are you “,”I am fine”,”can you tell me”))
#每行第一个单词作为键,整个句子作为值
#建立键值对rdd
Val words =rdd.map(x=>(x.split( “ “) (0),x))
Words.collect.foreach(print)
键值对rdd的keys和values方法
Keys:方法返回一个仅包含键的rdd
Values:返回一个仅包含值的rdd
#使用keys方法:
Val key=word.keys
#查看key
key.collect. foreach(print)
#使用values方法
Val value=words.values
#查看value
Value. collect. foreach(print)
使用键值对rdd的reducebykey()方法
Reducebykey方法:用于合并相同键的值,作用对象是键值对,只对键的处理
Reducebykey():将相同键的前两个值传给输入函数,产生一个新的返回值,新产生的返回值与rdd中的相同键的下一个值组成两个元素,在传给输出函数
#创建rdd
Val rdd_1=sc.parallelize(
List((‘a’,1,(‘a’,2),(‘b’,1),(‘c’,1), ,(‘c’,1)))
#使用reducebykey()方法将值相加
Val re_rdd1=rdd_1.reduceByKey((a,b)=>a+b)
#查看结果
Re_rdd_1. collect. foreach(print)
使用键值对rdd的groupbykey()方法
groupbykey:对具有相同键的值进行分组,可对同一组进行计数和求和等
#groupbykey()相同键分组
Val g_rdd=rdd_1.groupbykey()
#查看分组结果
g_rdd. collect. foreach(print)
#使用map方法查看分组后每个分组中的值和数量
G_rdd.map(x=>x._1,x._2.size)).collect.foreach(print)
使用join方法连接两个rdd
- join:对两个rdd进行内连接,eg:两个rdd中分别有键值对(k,v)和(k,w)=>(k,(v,w))
#创建rdd
Val rdd1=sc.parallelize(List((‘a’,1),(‘b’,2),(‘c’,3)))
Val rdd2=sc.parallelize(List((‘a’,1),(‘d’,4),(‘e’,5)))
#使用join方法对两个rdd内连接
Val j_rdd=rdd1.join(rdd2)
#查看
J_rdd.collect.foreach(print)
Rightouterjoin()方法
对键对两个rdd进行右外连接
Val right_join=rdd1.rightouterjoin(rdd2)\
Right_join.collect.foreach(print)
leftouterjoin()方法
Val left_join=rdd1.leftouterjoin(rdd2)\
left_join.collect.foreach(print)
fullouterjoin()方法
Val full_join=rdd1.fullouterjoin(rdd2)\
full_join.collect.foreach(print)
通过lookup()方法查找指定键的值
Eg:通过lookup()方法查询test的键为panda的所对应的值
Test.lookup(“panda”)