Spark学习之键值对(pair RDD)操作(3)-阿里云开发者社区

开发者社区> 大数据> 正文
登录阅读全文

Spark学习之键值对(pair RDD)操作(3)

简介: Spark学习之键值对(pair RDD)操作(3) 1. 我们通常从一个RDD中提取某些字段(如代表事件时间、用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键。 2. 创建pair RDD 1)读取本身就是键值对的数据 2)一个普通的RDD通过map()转为pair RDD,传递的函数需要返回键值对。 Python中使用第一个单词作为

Spark学习之键值对(pair RDD)操作(3)

1. 我们通常从一个RDD中提取某些字段(如代表事件时间、用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键。

2. 创建pair RDD

1)读取本身就是键值对的数据
2)一个普通的RDD通过map()转为pair RDD,传递的函数需要返回键值对。
Python中使用第一个单词作为键创建出一个pair RDD
    pairs = lines.amp(lambda x: (x.split(" ")[0],x))
Scala中使用第一个单词作为键创建出一个pair RDD
    val pairs = lines.map(x=>(x.split(" ")(0),x))

3. pair RDD的转化操作

pair RDD可以使用所有标准RDD上的可能的转化操作,还有其他如下

reduceBykey(func)       合并具有相同键的值

groupByke()             对具有相同键的值进行分组

combineByKey(           使用不同的的返回类型合并具有相同键的值
createCombiner,
mergeValue,
mergCombiners,
partitioner)

mapValues(func)         对pair RDD中的每个值应用一个函数而不改变键

flatMapValues(func)     对pair RDD中的每个值应用一个返回迭代器的函数,
                        然后对返回的每个元素都生成一个对应原键的键值对记录。
                        通常用于符号化。

keys()                  返回一个仅包含键的RDD

values()                返回一个仅包含值的RDD

sortByKey()             返回一个根据键排序的RDD

4. 针对两个pair RDD转化操作

subtractByKey           删掉RDD中键与other RDD中的键相同的元素
join                    对两个RDD进行内连接
rightOuterJoin          对两个RDD进行连接操作,确保第一个RDD的键必须存在(右外连接)
leftOuterJoin           对两个RDD进行连接操作,确保第二个RDD的键必须存在(左外连接)
cogroup                 将两个RDD中拥有相同键的数据分组到一起

5. pair RDD的行动操作

countByKey()            对每个键对应的元素分别计数
collectAsMap()          将结果以映射表的形式返回,以便查询
lookup(key)             返回给定键对应的所有值

6. 数据分区

控制数据分布以获得最少的网络传输可以极大地提升整体性能。
只有当数据集多次在诸如连这种基于键的操作中使用时,分区才有帮助。

Scala自定义分区方式
    val sc = new SparkContext(...)
    val userData = sc.sequenceFile(UserID,UserInfo)("hdfs://...")
                     .partitionBy(new HashPartitioner(100))
                     .persist()

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

其他文章
最新文章
相关文章