我在Apache Spark的MLlib中为FuzzyCMeans算法编写了一个实现,但出于某种原因,当我尝试打印输出时,系统卡住了。
这是我的意见:
scala> val data = sc.textFile("data/mllib/kmeans_data.txt")
> data: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:29
scala> data.collect().foreach{ point => println(point)
0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2
但是当我在运行算法后尝试打印输出时,它会卡住:
输出的大小应为6(与输入相同)
scala> val clusters = FuzzyCMeans.train(parsedData, numClusters, numIterations)
> clusters: org.apache.spark.mllib.clustering.FuzzyCMeansModel = org.apache.spark.mllib.clustering.FuzzyCMeansModel@31934160
scala> val ret = clusters.predictMatrix(parsedData)
> ret: org.apache.spark.rdd.RDD[Array[Double]] = MapPartitionsRDD[17] at map at FuzzyCMeansModel.scala:276
scala> ret.collect().foreach{ point => println(point.deep.mkString(" "))
> STUCK.....
}
即使我尝试计算RDD [数组],我也会得到相同的结果:
val ret = clusters.predictMatrix(parsedData)
ret: org.apache.spark.rdd.RDD[Array[Double]] = MapPartitionsRDD[11] at map at FuzzyCMeansModel.scala:276
scala> ret.count
> STUCK
答案 0 :(得分:0)
运行getCause()
或putItem
的点是Spark开始运行预测代码的时间点。所以它不一定会被卡住,它只是工作。
查看Spark状态UI(端口4040)以查看究竟发生了什么。它会告诉您是否正在取得进展。您还可以查看执行程序和驱动程序日志,以更好地了解情况。您可以从代码中打印内容并在执行程序日志中查看,以便更深入地了解代码的作用。