使用现有密钥Pysp创建值列表的组合

2024-10-06 11:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我的rdd包含的数据如下:

(k, [v1,v2,v3...])

我想为value部分创建一个所有两个集合的组合。在

因此,结束图应该如下所示:

^{pr2}$

我知道要得到价值部分,我会用类似的东西

rdd.cartesian(rdd).filter(case (a,b) => a < b)

但是,这需要整个rdd都通过(对吗?)不仅仅是价值部分。我不确定如何到达我想要的目的地,我怀疑这是一个群居。在

最后,我想得到k,v

((k1,v1,v2),1)

我知道如何从我正在寻找的东西中得到,但也许直接去那里更容易些?在

谢谢。在


Tags: 数据valuek1v3filterv2v1case
3条回答

我认为以色列的回答是不完整的,所以我更进一步。在

import itertools

a = sc.parallelize([
    (1, [1,2,3,4]),
    (2, [3,4,5,6]),
    (3, [-1,2,3,4])
  ])

def combinations(row):
  l = row[1]
  k = row[0]
  return [(k, v) for v in itertools.combinations(l, 2)]

a.map(combinations).flatMap(lambda x: x).take(3)
# [(1, (1, 2)), (1, (1, 3)), (1, (1, 4))]

使用itertools创建组合。下面是一个演示:

import itertools

k, v1, v2, v3 = 'k1 v1 v2 v3'.split()

a = (k, [v1,v2,v3])

b = itertools.combinations(a[1], 2)
data = [(k, pair) for pair in b]

data将是:

^{pr2}$

我已经做了这个算法,但是如果数值比较大的话,它会运行在一个大数据集群中(cloudera),所以我想我必须把这个函数放到pyspark中,如果可以的话,请帮帮我。在

将熊猫作为pd导入 将itertools作为itts导入

号码列表=[10953,10423,10053]

def减压器(nums): def范围(n): 打印(n) 返回范围(n,-1,-1)

num_list=列表(map(范围,num)) 退货清单(itts.产品(*数字列表)

数据=pd数据帧(减速器(编号清单) 打印(数据)

相关问题 更多 >