pySpark RankingMetrics错误'ImportError:没有名为numpy的模块'

时间:2017-06-02 06:04:31

标签: numpy pyspark apache-spark-mllib

我运行ALS推荐器模型(558K用户,约300种产品)。通过使用recommendedProductsForUsers调用,我获得了每个用户的前10个建议。 为了计算RankingMetrics,我需要以(userID,[10个产品ID的数组])的形式得到它,然后将其与用户的实际评级结合起来(用户ID,[使用的产品]列表])。

然而,当我运行'recommendedProductsForUsers(10)'并尝试使用它时,我总是遇到一个pysaprk错误'ImportError:没有名为numpy的模块',但事实并非如此,因为我在pyspark中使用numpy没有问题。 它看起来更像是“资源缺失”? (工人使用8g,守护程序使用8g,驱动程序使用8g)

是否有更好/更有效的方法将suggestProductsForUsers(10)的输出重新整理为RankingMetrics所需的RDD?我究竟做错了什么 ? 在官方文档中只有一个scala示例,给出的pyspark示例显示了错误的指标(回归指标)。请参阅:https://spark.apache.org/docs/2.1.0/mllib-evaluation-metrics.html#ranking-systems

代码:

# RankingMetrics on VALIDATION + TEST set
# Get recommendations per user (top-n list) 
# Need to collect() immediately or resource/numpy error !  Then parallelize 
again into an RDD for remap/join 

t0_adv=time()
userRecommended = bestModel.recommendProductsForUsers(n).collect()
userRecommended_RDD = sc.parallelize(userRecommended)\
                         .map(lambda (k,v): (k, [x[1] for x in v]))

# Get the actual usage
userMovies = validation_RDD.groupBy("new_uid")\
    .agg(F.collect_set("new_pgm")\
    .alias("actualVideos")).rdd

# join into a prediction vs actual RDD
predictionsAndLabels = userRecommended_RDD.join(userMovies).cache()

# Get the metrics
metricsRank = RankingMetrics(predictionsAndLabels.map(lambda r: r[1]))
tt_adv = time() - t0_adv

print "Time required : %.0f" % tt_adv
print "p5   %.8f" % metricsRank.precisionAt(5)
print "MAP  %.8f" % metricsRank.meanAveragePrecision
print "nDCG %.8f" % metricsRank.ndcgAt(5)

0 个答案:

没有答案