应用 pyspark ALS 时出现 StackOverflow 错误 "recommendProductsForUsers"(尽管 >300GB Ram 的集群可用)

StackOverflow-error when applying pyspark ALS's "recommendProductsForUsers" (although cluster of >300GB Ram available)

正在寻找专业知识来指导我解决以下问题。

背景:

我遇到的问题

详情

失败的代码行

predictions = model.recommendProductsForUsers(10).flatMap(lambda p: p[1]).map(lambda p: (str(p[0]), str(p[1]), float(p[2])))
pprint.pprint(predictions.take(10))
schema = StructType([StructField("customer", StringType(), True), StructField("sku", StringType(), True), StructField("prediction", FloatType(), True)])
dfToSave = sqlContext.createDataFrame(predictions, schema).dropDuplicates()

您建议如何进行?我觉得我的脚本末尾的 'merging' 部分(即当我将它写入 dfToSave 时)导致了错误;有没有办法绕过这个并逐部分保存?

从堆栈跟踪来看,这似乎是与

相同的问题

基本上,Spark 递归地表示 RDD 沿袭,这样当在迭代工作负载过程中没有对事物进行惰性评估时,您最终会得到深度嵌套的对象。调用 sc.setCheckpointDir 并调整检查点间隔将减少此 RDD 谱系的长度。