gsa*_*ras 11 python bigdata k-means apache-spark apache-spark-mllib
KMeans有几个参数用于训练,初始化模式默认为kmeans ||.问题是它快速(少于10分钟)前进到前13个阶段,然后完全挂起,不会产生错误!
再现问题的最小示例(如果我使用1000点或随机初始化,它将成功):
from pyspark.context import SparkContext
from pyspark.mllib.clustering import KMeans
from pyspark.mllib.random import RandomRDDs
if __name__ == "__main__":
sc = SparkContext(appName='kmeansMinimalExample')
# same with 10000 points
data = RandomRDDs.uniformVectorRDD(sc, 10000000, 64)
C = KMeans.train(data, 8192, maxIterations=10)
sc.stop()
Run Code Online (Sandbox Code Playgroud)
这项工作什么都不做(它没有成功,失败或进展......),如下所示."执行者"选项卡中没有活动/失败的任务.Stdout和Stderr Logs没有特别有趣的东西:
如果我使用k=81
,而不是8192,它将成功:
请注意,这两个电话takeSample()
,不应该是一个问题,因为有在随机初始化的情况下打了两次电话.
那么,发生了什么?Spark的Kmeans 无法扩展吗?有人知道吗?你可以重现吗?
如果这是一个内存问题,我会像以前一样得到警告和错误.
注意:placeybordeaux的注释基于在客户端模式下执行作业,其中驱动程序的配置无效,导致退出代码143等(请参阅编辑历史记录),而不是群集模式,其中根本没有报告错误,应用程序只是挂起.
从零到323:为什么Spark Mllib KMeans算法非常慢?是相关的,但我认为他目睹了一些进展,而我的确悬而未决,我确实发表评论......
我认为'悬挂'是因为你的遗嘱执行人不断死亡.正如我在旁边的会话中提到的,这个代码对我来说很好,本地和群集,Pyspark和Scala.但是,它需要更长的时间.几乎所有时间花在k-means ||上 初始化.
我打开了https://issues.apache.org/jira/browse/SPARK-17389来跟踪两个主要改进,其中一个可以立即使用.编辑:真的,另见https://issues.apache.org/jira/browse/SPARK-11560
首先,有一些代码优化可以将init加速大约13%.
然而,大多数问题是它默认为k-means ||的5个步骤 init,当看起来2几乎总是那么好.您可以将初始化步骤设置为2以查看加速,尤其是在现在挂起的阶段.
在我的笔记本电脑上的(较小的)测试中,初始时间从5:54到1:41进行了两次更改,主要是因为设置了初始化步骤.
归档时间: |
|
查看次数: |
2645 次 |
最近记录: |