spark之键值对RDD

1、键值对RDD生成方式

1.1、通过map函数来生成

通过map函数将x映射为(x,1)

#在本地进行操作
textFile = sc.textFile("file:///home/jsy/spark_test/test.txt")
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda x:(x,1))

2、常用键值对转换方式

常用的键值对转换操作包括reduceByKey()、groupByKey()、sortByKey()、join()、cogroup()等,下面我们通过实例来介绍。

from pyspark import SparkContext
sc = SparkContext( 'local', 'test')

2.1、声明一个键值对RDD

#在本地进行操作
textFile = sc.textFile("file:///home/jsy/spark_test/test.txt")
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda x:(x,1))

2.2、reduceByKey(func) 使用func函数合并具有相同键的值

#reduceByKey(func) 使用func函数合并具有相同键的值
rdd=wordCount.reduceByKey(lambda a,b:a+b)

2.3、groupByKey()的功能是,对具有相同键的值进行分组。

#groupByKey()的功能是,对具有相同键的值进行分组。
wordCount.groupByKey().collect()

2.4、keys返回键值对RDD的keys作为一个新的RDD

       values返回键值对的values作为一个新的RDD

#keys返回键值对RDD的keys作为一个新的RDD
rdd.keys().collect()

#values返回键值对的values作为一个新的RDD
rdd.values().collect()

2.5、sortByKey()返回根据键排序的RDD

#sortByKey()返回根据键排序的RDD
rdd.sortByKey().collect()

2.6、mapValues(func)只想对键值对RDD的value部分进行处理

#mapValues(func)只想对键值对RDD的value部分进行处理
rdd.mapValues(lambda x:x+1).collect()

2.7、join对于内连接,对于给定的两个输入数据集(K,V1)和(K,V2),只有在两个数据集中都存在的key才会被输出,最终得到一个(K,(V1,V2))类型的数据集。

#join内连接(join)、左外连接(leftOuterJoin)、右外连接(rightOuterJoin)
#对于内连接,对于给定的两个输入数据集(K,V1)和(K,V2),只有在两个数据集中都存在的key才会被输出,最终得到一个(K,(V1,V2))类型的数据集。
rdd2=rdd.filter(lambda x:x[1]>1)
rdd2=rdd2.mapValues(lambda x:x+1)
rdd2.collect()
rdd3=rdd.join(rdd2)
rdd3.collect()

2.8、综合应用

#给定一组键值对(“spark”,2),(“hadoop”,6),(“hadoop”,4),(“spark”,6),请计算每个键对应的平均值
rdd4=sc.parallelize([("spark",2),("hadoop",6),("hadoop",4),("spark",6)])
rdd4.collect()
rdd5=rdd4.mapValues(lambda x:(x,1))
print(rdd5.collect())
rdd6=rdd5.reduceByKey(lambda a,b :(a[0]+b[0],a[1]+b[1])).mapValues(lambda x:x[0]/x[1])
rdd6.collect()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值