键值对RDD
创建
- 从数据中进行加载生成键值对RDD
1 | lines = sc.textFile("word.txt") |
-
并行集合组成键值对RDD
1
2
3
4list = ["hadoop", "spark", "hive"]
rdd = sc.parallelize(list)
pairRDD = rdd.map(lambda word:(word, 1)) # 转成键值对RDD
pairRDD.foreach(print)
常见转换
reduceByKey(func)
先通过key
进行分组,再通过value
进行func
函数的运用
1 | pairRDD = sc.parallelize([("hadoop",1),("hive",1),("spark", 1), ("spark", 1)]) |
groupByKey()
不进行聚合运算,只是将相同键的值进行合并成一个列表的形式。
1 | pairRDD = sc.parallelize([("hadoop",1),("hive",1),("spark", 1), ("spark", 1)]) |
reduceByKey
可以等价于groupByKey
加上map
操作:
1 | # 1 |
keys()/vlaues()
只取出key/value的值
1 | pairRDD = sc.parallelize([("hadoop",1),("hive",1),("spark", 1), ("spark", 1)]) |
sortBykey()
对key
进行排序,默认是升序False
mapValues(func)
key
保持不变,值根据func
函数进行改变
1 | pairRDD = sc.parallelize([("hadoop",1),("hive",1),("spark", 1), ("spark", 1)]) |
join
如果两个RDD
的key
相同,将它们的value
进行合并,形成一个元组的形式。
综合demo
mapValues
:只对value
进行操作,而且没有聚合操作reduceByKey(func)
:先分组,再对value
进行函数func
的聚合操作