【问题标题】:Error in using MLlib function ALS in Spark在 Spark 中使用 MLlib 函数 ALS 时出错
【发布时间】:2016-10-28 17:07:17
【问题描述】:

我读过这样的文件:

val ratingText = sc.textFile("/home/cloudera/rec_data/processed_data/ratings/000000_0")

使用以下函数解析此数据:

def parseRating(str: String): Rating= {
      val fields = str.split(",")
      Rating(fields(0).toInt, fields(1).trim.toInt, fields(2).trim.toDouble)
}

并创建了一个rdd,然后拆分成不同的RDD

val ratingsRDD = ratingText.map(x=>parseRating(x)).cache()

val splits = ratingsRDD.randomSplit(Array(0.8, 0.2), 0L)

val trainingRatingsRDD = splits(0).cache()

使用训练RDD创建模型如下:

val model = (new ALS().setRank(20).setIterations(10) .run(trainingRatingsRDD))

我在最后一个命令中收到以下错误

16/10/28 01:03:44 WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS
16/10/28 01:03:44 WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeRefBLAS
16/10/28 01:03:46 WARN LAPACK: Failed to load implementation from: com.github.fommil.netlib.NativeSystemLAPACK
16/10/28 01:03:46 WARN LAPACK: Failed to load implementation from: com.github.fommil.netlib.NativeRefLAPACK

编辑:T. Gaweda 的建议有助于消除错误,但我仍然收到以下警告:

16/10/28 01:53:59 WARN Executor: 1 block locks were not released by TID = 60:
[rdd_420_0]
16/10/28 01:54:00 WARN Executor: 1 block locks were not released by TID = 61:
[rdd_421_0]

我认为这导致了一个空模型,因为下一步会导致以下错误:

val topRecsForUser = model.recommendProducts(4276736,3)

错误是:

java.util.NoSuchElementException: next on empty iterator at scala.collection.Iterator$$anon$2.next(Iterator.scala:39)

请帮忙!

【问题讨论】:

    标签: scala apache-spark apache-spark-mllib


    【解决方案1】:

    这只是一个警告。 Spark 使用 BLAS 执行计算。 BLAS 具有原生实现和 JVM 实现,原生实现更优化/更快。但是,您必须单独安装本机库。

    如果没有此配置,将出现警告消息,并且 Spark 将使用 BLAS 的 JVM 实现。结果应该是一样的,可能计算的比较慢。

    Here 你已经了解了什么是 BLAS 以及如何配置它,例如在 Cent OS 上应该只有:yum install openblas lapack

    【讨论】:

    • 谢谢@T。 Gaweda,在消除警告方面效果很好,但以下错误仍然存​​在。你能看看吗;:val model = (new ALS().setRank(20).setIterations(10) .run(trainingRatingsRDD)) 16/10/28 01:53:59 WARN Executor: 1 block locks were not TID = 60 释放:[rdd_420_0] 16/10/28 01:54:00 WARN 执行器:TID = 61 未释放 1 个块锁:[rdd_421_0] 模型:org.apache.spark.mllib.recommendation.MatrixFactorizationModel = org.apache.spark.mllib.recommendation.MatrixFactorizationModel@4a853a7d
    • 另外,在此之后,当我使用 val topRecsForUser = model.recommendProducts(4276736,3) 时,我收到一条错误消息 java.util.NoSuchElementException: next on empty iterator at scala.collection.Iterator$$ anon$2.next(Iterator.scala:39) 是否意味着模型为空?请帮忙!
    • 你的代码有问题 - 你试图用模型中不存在的用户 ID 进行预测 - stackoverflow.com/questions/32488328/…
    • 非常感谢您的帮助,T Gaweda!你是对的
    猜你喜欢
    • 2017-11-03
    • 2016-11-08
    • 1970-01-01
    • 2018-07-19
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多