本文主要是介绍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()
这篇关于spark之键值对RDD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!