gpt4 book ai didi

python - 从元组列表创建 Spark rdd 并使用 groupByKey

转载 作者:行者123 更新时间:2023-12-01 09:31:42 34 4
gpt4 key购买 nike

我有一个如下所示的元组列表

ls=[('c', 's'),('c', 'm'), ('c', 'p'), ('h', 'bi'), ('h', 'vi'), ('n', 'l'), ('n', 'nc')]

我想使用 pyspark 和 groupByKey 来生成:

nc=[['c','s', 'm', 'p'], ['h','bi','vi'], ['n','l', 'nc']

我不知道如何制作 Spark rdd 并使用 groupByKey。

我尝试过:

tem=ls.groupByKey()  

'list' object has no attribute 'groupByKey'

最佳答案

您收到该错误是因为您的对象是 list而不是rdd 。 Python 列表没有 groupByKey()方法(如错误所述)。

您可以先将列表转换为 rdd使用sc.parallelize :

myrdd = sc.parallelize(ls)
nc = myrdd.groupByKey().collect()
print(nc)
#[('c',['s', 'm', 'p']), ('h',['bi','vi']), ('n',['l', 'nc'])]

这将返回一个元组列表,其中第一个元素是键,第二个元素是值列表。如果你想展平这些元组,你可以使用 itertools.chain.from_iterable :

from itertools import chain
nc = [tuple(chain.from_iterable(v)) for v in nc]
print(nc)
#[('c', 's', 'm', 'p'), ('h', 'bi', 'vi'), ('n', 'l', 'nc')]

但是,您可以使用 itertools.groupby 完全避免 Spark ,达到预期的结果:

from itertools import groupby, chain
ls=[('c', 's'),('c', 'm'), ('c', 'p'), ('h', 'bi'), ('h', 'vi'), ('n', 'l'), ('n', 'nc')]

nc = [
(key,) + tuple(chain.from_iterable(g[1:] for g in list(group)))
for key, group in groupby(ls, key=lambda x: x[0])
]
print(nc)
#[('c', 's', 'm', 'p'), ('h', 'bi', 'vi'), ('n', 'l', 'nc')]

关于python - 从元组列表创建 Spark rdd 并使用 groupByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49910075/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com