我有一个相当简单的用例,但可能是非常大的结果集.我的代码执行以下操作(在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树必须适合内存.因此,有关提高最低支持门槛的建议是有效的.
-Raj