我试图从数据库中计算频繁项集。该数据库有31101个篮子和12592个项目。我能够得到频繁出现的项目,超过一些阈值。元素具有字符串数据类型(例如“FRO11987”)
现在,我正在尝试使用cartesian
操作从这些频繁项形成一对。我得到735个频繁项,当我使用笛卡尔运算时,我希望它是一个快速运算
然而,形成这一对花的时间太长(超过20分钟)。我一定是在写pyspark代码时出错了。在这方面的任何帮助都将不胜感激。多谢各位
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
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()
print(f1c.count())
样本数据如下所示:
FRO11987 ELE17451 ELE89019 SNA90258 GRO99222
GRO99222 GRO12298 FRO12685 ELE91550 SNA11465 ELE26917 ELE52966 FRO90334 SNA30755 ELE17451 FRO84225 SNA80192
ELE17451 GRO73461 DAI22896 SNA99873 FRO86643
ELE17451 ELE37798 FRO86643 GRO56989 ELE23393 SNA11465
ELE17451 SNA69641 FRO86643 FRO78087 SNA11465 GRO39357 ELE28573 ELE11375 DAI54444
我能够顺利地从上述数据中形成频繁项和配对。一旦数据很大(有31101个篮子),问题就开始出现。对于整个数据集,使用this file
目前没有回答
相关问题 更多 >
编程相关推荐