【发布时间】:2016-01-14 06:05:05
【问题描述】:
我有一个相当简单的用例,但结果集可能非常大。我的代码执行以下操作(在 pyspark shell 上):
from pyspark.mllib.fpm import FPGrowth
data = sc.textFile("/Users/me/associationtestproject/data/sourcedata.txt")
transactions = data.map(lambda line: line.strip().split(' '))
model = FPGrowth.train(transactions, minSupport=0.000001, numPartitions=1000)
# Perform any RDD operation
for item in model.freqItemsets().toLocalIterator():
# do something with item
我发现每当我通过调用 count() 或 toLocalIterator 开始实际处理时,我的操作最终都会以内存不足错误结束。 FPGrowth 没有对我的数据进行分区吗?我的结果数据是否如此之大,以至于即使是一个分区也会阻塞我的记忆?如果是,有没有办法我可以以“流式”方式将 RDD 持久保存到磁盘,而无需尝试将其保存在内存中?
感谢您提供任何见解。
编辑: FPGrowth 的一个基本限制是整个 FP Tree 必须适合内存。因此,关于提高最低支持门槛的建议是有效的。
-拉吉
【问题讨论】:
-
你有多少内存,你有多少产品?
-
嗨 Alberto:在本地运行时,我给驱动程序 12G 内存。我的输入文件相当大:177468 行,每行包含相当多的项目。
标签: apache-spark rdd apache-spark-mllib