win7环境PySpark1.5.0下的pyspark crash for large dataset和
问题描述
在学习《Spark机器学习》第四章时,参考风雪夜归子写的用Spark Python构建推荐系统 学习的过程中,发现执行如下代码段:
from pyspark import SparkContext
sc = SparkContext(appName="recommendation engine")
#生成用户数据的RDD
rawData=sc.textFile("D:/myPython/ML_Spark/Datasets/ml-100k/u.data")
#显示第一行数据
print rawData.first()
#分割用户数据,只取用户、电影和评分数据
rawRatings=rawData.map(lambda line: line.split('\t')[0:3])
#显示前5组数据
print rawRatings.take(5)
#导入Spark Mlib的ALS模型,Rating类是对用户ID、影片ID(通常称物品Product)和实际星级封装成RDD
from pyspark.mllib.recommendation import Rating,ALS
#ratings = rawRatings.map(lambda (user,movie,rating):Rating(int(user),int(movie),float(rating)))
ratings = rawRatings.map(lambda x:Rating(int(x[0]),int(x[1]),float(x[2])))
#显示Rating RDD的前5个数据。
print ratings.take(5)
#现在可以开始训练模型了,所需的其他参数有以下几个。
#rank:对应ALS模型中的因子个数,也就是在低阶近似矩阵中的隐含特征个数。因子个数一般越多越好。但它也会直接影响模型训练和保存时所需的内存开销,尤其是在用户和物品很多的时候。因此实践中该参数常作为训练效果与系统开销之间的调节参数。通常,其合理取值为10到200。
#iterations:对应运行时的迭代次数。ALS能确保每次迭代都能降低评级矩阵的重建误差,但一般经少数次迭代后ALS模型便已能收敛为一个比较合理的好模型。这样,大部分情况下都没必要迭代太多次(10次左右一般就挺好)。
#lambda:该参数控制模型的正则化过程,从而控制模型的过拟合情况。其值越高,正则化越严厉。该参数的赋值与实际数据的大小、特征和稀疏程度