在spark中使用mllib函数als时出错

j13ufse2  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(562)

我从这样一个文件中读到:

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。加韦达的建议有助于消除错误,但我仍得到以下警告:

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=型号.推荐产品(4276736,3)
错误是:

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

请帮帮我!

t1qtbnec

t1qtbnec1#

这只是一个警告。spark使用blas进行计算。blas有本机实现和jvm实现,本机实现更优化/更快。但是,必须单独安装本机库。
如果没有此配置,将出现警告消息,spark将使用blas的jvm实现。结果应该是一样的,可能计算得比较慢。
这里有关于什么是blas以及如何配置它的描述,例如在cent os上,应该是: yum install openblas lapack

相关问题