我有一个很大的篮子数据库(N=31101),我想计算频繁配对的出现次数。我正在使用get_sup
函数来实现这一点。我能用几分钟计算出常用物品的数量。然而,获取频繁配对的计数花费的时间太长,因为有269745对,所有这些配对都必须在N个篮子中进行检查
我在get_sup
函数中使用for循环来完成它。在Spark中还有其他技巧可以让我更有效地使用吗
def get_sup(x):
x_sup = 0
for t in shared_itemset.value:
if x.issubset(t):
#if set({x}).issubset(set(t)):
x_sup +=1
if x_sup >= sup:
return x, x_sup
else:
return ()
data = sc.textFile('browsing.txt')
itemset = data.map(lambda line: ([item for item in line.strip().split(' ')]))
shared_itemset = sc.broadcast(itemset.map(lambda x: frozenset(x)).collect())
c1 = data.flatMap(lambda line: line.strip().split(' ')).distinct()
c1 = c1.map(lambda x : frozenset({x}))
print(c1.count())----------------------------------------------- 12592
f1 = c1.map(get_sup).filter(lambda x: x)
print(f1.count())----------------------------------------------- 735
f1.persist()
f1m = f1.map(lambda x: tuple(x[0]))
f1c = f1m.cartesian(f1m).map(lambda x: frozenset(x[0]+x[1])).filter(lambda x: len(x)>1).distinct()
# f1c has 269745 elements and has data structure frozenset({'FRO11987', 'GRO73461'})
f2 = f1c.map(get_sup).filter(lambda x: x) pairs
多谢各位。对于整个数据集,使用this file
这个解决方案可能有效:对于每个篮子,它计算其元素的可能对,然后检查
pair
是否在这些元素中。然后输出包含所述对的篮子的百分比相关问题 更多 >
编程相关推荐