PySpark groupBy groupByKey用法

用法

  • groupBy: 每个元素根据用户指定的函数运行结果作为key,然后进行分组;
    如果需要 自定义分组的key可以使用此方法;
    在这里插入图片描述
  • groupByKey:rdd每个元素根据第一个值作为key进行分组

用法示例

# -*- coding: utf-8 -*-
"""
(C) rgc
All rights reserved
create time '2021/5/30 21:01'

Usage:

"""
# 构建spark
from pyspark.conf import SparkConf
from pyspark.context import SparkContext

conf = SparkConf()
# 使用本地模式;且 executor设置为1个方便debug
conf.setMaster('local[1]').setAppName('rgc')
sc = SparkContext(conf=conf)

rdd = sc.parallelize([(2, 3), (1, 4), (2, 4), (1, 5), (3, 3)], 2)


def func(x):
    """

    :param x:
    :return:
    """
    return x[1]


# 根据rdd每个元素的某个值作为key进行分组
# 根据每个元素的 第二个值作为key进行分组
rdd_res = rdd.groupBy(func).cache()
# 将分组后每个元素的values转为list 输出
print(rdd_res.mapValues(list).collect())  # [(4, [(1, 4), (2, 4)]), (3, [(2, 3), (3, 3)]), (5, [(1, 5)])]


def func1(x):
    """
    对list进行转换
    :param x:
    :return:
    """
    _list = []
    for item in list(x):
        _list.append(item[0])
    return _list


# 对分组后每个元素的 values 进行操作 并输出
print(rdd_res.mapValues(func1).collect())  # [(4, [1, 2]), (3, [2, 3]), (5, [1])]

# groupByKey:根据每个元素的第一个值作为key进行分组,返回的是可迭代对象
rdd_res = rdd.groupByKey()
# 通过 mapValues 对每个元素的 values进行操作,并输出结果
print(rdd_res.mapValues(list).collect())  # [(2, [3, 4]), (1, [4, 5]), (3, [3])]

总结

  • groupBy其实内部调用的groupByKey方法;
  • 这2个方法只对RDD进行分组,返回的是 迭代对象,且不对分组结果进行进一步处理;一般后续接的是 mapValues方法,将迭代对象转为一般数据结构;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值