pyspark-Rdd-groupby-groupByKey-cogroup-groupWith用法

一、groupBy()
groupBy(f, numPartitions=None, partitionFunc=)
Return an RDD of grouped items.

代码:
rdd=sc.parallelize([1,42,3,4,5,1,4,5,0])
res=rdd.groupBy(lambda x:x%2).collect()
print(res)

在这里插入图片描述
拿到迭代器的具体值:

for x,y in res:
    print(x)
    print(y)
    print(sorted(y))
    print("*"*44)

在这里插入图片描述

a=sorted([(x,sorted(y)) for (x,y) in res])
print(a)

a=sorted([(x,y) for (x,y) in res])
print(a)

a=[(x,sorted(y)) for (x,y) in res]
print(a)

在这里插入图片描述

二、groupByKey(numPartitions=None, partitionFunc=)

Group the values for each key in the RDD into a single sequence. Hash-partitions the resulting RDD with numPartitions partitions.
根据k分组

rdd=sc.parallelize([('a',1),('b',100),('a',200)])
a=rdd.groupByKey().collect()
print(a)

在这里插入图片描述

for i,j in a:
    print(i)
    print(sorted(j))

在这里插入图片描述

a=sorted(rdd.groupByKey().mapValues(len).collect())
print(a)
a=sorted(rdd.groupByKey().mapValues(list).collect())
print(a)

在这里插入图片描述

三、groupWith(other, *others)
Alias for cogroup but with support for multiple RDDs.
多个RDD group 类似cogroup

w = sc.parallelize([("a", 5), ("b", 6)])
x = sc.parallelize([("a", 1), ("b", 4)])
y = sc.parallelize([("a", 2)])
z = sc.parallelize([("b", 42)])
a=w.groupWith(x,y,z).collect()
print(a)

在这里插入图片描述

w = sc.parallelize([("a", 5), ("b", 6),('a',100)])
x = sc.parallelize([("a", 1), ("b", 4)])
y = sc.parallelize([("a", 2)])
z = sc.parallelize([("b", 42)])
a=w.groupWith(x,y,z).collect()
for i,j in a:
    print(i)
    for l in j:
        print(l)
        print(sorted(l))
    print("*"*55)

在这里插入图片描述

b=[(x,tuple(map(list,y))) for x,y in sorted(list(a))]
print(b)
结果:
[('a', ([5, 100], [1], [2], [])), ('b', ([6], [4], [], [42]))]

四、cogroup(other, numPartitions=None)
For each key k in self or other, return a resulting RDD that contains a tuple with the list of values for that key in self as well as other.

x=sc.parallelize([('a',100),('b',4),('a',300)])
y=sc.parallelize([('a',65)])

a=[(x, tuple(map(list, y))) for x, y in sorted(list(x.cogroup(y).collect()))]
print(a)
结果:
[('a', ([100, 300], [65])), ('b', ([4], []))]	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值