【发布时间】:2020-12-29 06:58:11
【问题描述】:
我有一个大型的购物篮数据库 (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
【问题讨论】:
标签: python pyspark data-mining apriori