【问题标题】:Spark ALS implicit exceptionSpark ALS 隐式异常
【发布时间】:2016-02-21 09:19:31
【问题描述】:

我们在 Azure Spark 上使用 ALS 来构建我们的推荐系统。

由于计算能力的原因,我们无法为每个用户输出不同的推荐列表。因此,我们将用户划分为集群,并使用 ALS 为每个单独的集群质心输出推荐列表。

在对用户进行聚类之前,我们在 Spark 上使用标准缩放器和规范化器对数据进行预处理,以获得更好的聚类结果。但是,这在使用 ALS.trainImplicit 时会导致以下异常

15/11/16 15:43:11 INFO TaskSetManager:在执行程序 localhost 的阶段 15.0(TID 197)中丢失任务 30.0:java.lang.AssertionError(断言失败:lapack.dppsv 返回 4。)[重复 9] 回溯(最近一次通话最后): 文件“/home/rogeesjir_huasqngfda/woradofkapkspace/jigsusLaudfadfecher/scripts/RecommendationBackend/AzureSpark/src/collaborativeFiltering/spark_als.py”,第 92 行,在 主要的() 文件“/home/rogeesjir_huasqngfda/rogeesjir_huasqngfda/jigsusLaudfadfecher/scripts/RecommendationBackend/AzureSpark/src/collaborativeFiltering/spark_als.py”,第 39 行,主要 模型 = ALS.trainImplicit(评级,排名,numIter,alpha=0.01) trainImplicit 中的文件“/home/jigsusLaudfadfecher/spark-1.3.1-bin-hadoop2.6/python/pyspark/mllib/recommendation.py”,第 147 行 2016 年 15 月 11 日 15:43:11 信息 TaskSetManager:在执行程序 localhost 的阶段 15.0(TID 192)中丢失任务 25.0:java.lang.AssertionError(断言失败:lapack.dppsv 返回 4。)[重复 10] 迭代,lambda_,块,阿尔法,非负,种子) 文件“/home/jigsusLaudfadfecher/spark-1.3.1-bin-hadoop2.6/python/pyspark/mllib/common.py”,第 120 行,在 callMLlibFunc 返回调用JavaFunc(sc, api, *args) 文件“/home/jigsusLaudfadfecher/spark-1.3.1-bin-hadoop2.6/python/pyspark/mllib/common.py”,第 113 行,在 callJavaFunc 返回 _java2py(sc, func(*args)) 调用中的文件“/home/jigsusLaudfadfecher/spark-1.3.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py”,第 538 行强> 文件“/home/jigsusLaudfadfecher/spark-1.3.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py”,第 300 行,在 get_return_value py4j.protocol.Py4JJavaError15/11/16 15:43:11 INFO TaskSetManager:在执行程序 localhost 的阶段 15.0(TID 183)中丢失任务 16.0:java.lang.AssertionError(断言失败:lapack.dppsv 返回 4。)[重复 11 ]

:调用 o39.trainImplicitALSModel 时出错。 :org.apache.spark.SparkException:作业因阶段失败而中止:阶段 15.0 中的任务 8 失败 1 次,最近一次失败:阶段 15.0 中丢失任务 8.0(TID 175,本地主机):java.lang.AssertionError:断言失败:lapack.dppsv 返回 4。 在 scala.Predef$.assert(Predef.scala:179) 在 org.apache.spark.ml.recommendation.ALS$CholeskySolver.solve(ALS.scala:355) 在 org.apache.spark.ml.recommendation.ALS$$anonfun$org$apache$spark$ml$recommendation$ALS$$computeFactors$1.apply(ALS.scala:1131) 在 org.apache.spark.ml.recommendation.ALS$$anonfun$org$apache$spark$ml$recommendation$ALS$$computeFactors$1.apply(ALS.scala:1092) 在 org.apache.spark.rdd.PairRDDFunctions$$anonfun$mapValues$1$$anonfun$apply$15.apply(PairRDDFunctions.scala:674) 在 org.apache.spark.rdd.PairRDDFunctions$$anonfun$mapValues$1$$anonfun$apply$15.apply(PairRDDFunctions.scala:674) 在 scala.collection.Iterator$$anon$11.next(Iterator.scala:328) 在 org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:249) 在 org.apache.spark.CacheManager.putInBlockManager(CacheManager.scala:172) 在 org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:79) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:242) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:27​​7) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:244) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61) 在 org.apache.spark.scheduler.Task.run(Task.scala:64) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

当我们删除“正则化”组件(即不做标准缩放器和规范器)时,一切正常。 顺便说一句,即使我们在 ALS 模型训练之前对数据进行正则化,ALS.train() 调用显式评分也可以正常工作。

有人遇到过这种问题吗? 我们还是新手,所以请帮忙!谢谢。

【问题讨论】:

  • 您能提供您的代码和示例数据集吗?该错误可能看起来好像在工作人员上运行了不应该运行的代码。 Spark 集群的配置细节也会有所帮助。

标签: azure pyspark


【解决方案1】:

对于未来的读者:

给定数据集中的几列仅包含零。在这种情况下, 数据矩阵没有满秩。因此,格拉姆矩阵是 单数,因此不可逆。 Cholesky 分解将 在这种情况下失败。如果标准偏差更大,也会发生这种情况 多于一列为零(即使值不为零)。我想我们 应该在代码中捕获此错误并退出并显示警告消息。 或者我们可以删除方差为零的列,然后继续 算法。

取自comment

只要确保大多数评分不为零,它就会起作用。

【讨论】:

    【解决方案2】:

    ALS.train() 出现类似错误:

    java.lang.AssertionError: assertion failed: lapack.dpotrs returned 6.
    ...
    

    Google 告诉我在 Spark JIRA https://issues.apache.org/jira/browse/SPARK-11918 上报告的一个问题,在使用加权最小二乘 (WLS) 进行线性回归时会出现相同的错误。显然,当您尝试求解病态线性方程组时,LAPACK 会引发此错误。

    在我的情况下,将 ALS.train() 参数 lambda_ 从默认值 0.01 增加到更高的值 >= 0.02 似乎有所帮助,但我不确定它是否会永久解决我的问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2017-07-09
      • 2017-11-03
      • 2019-12-24
      • 2016-09-19
      • 2017-01-19
      • 2018-08-07
      相关资源
      最近更新 更多