无法打印Spark的RDD [数组]

时间:2016-01-02 16:13:26

标签: scala apache-spark rdd

我在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

1 个答案:

答案 0 :(得分:0)

运行getCause()putItem的点是Spark开始运行预测代码的时间点。所以它不一定会被卡住,它只是工作。

查看Spark状态UI(端口4040)以查看究竟发生了什么。它会告诉您是否正在取得进展。您还可以查看执行程序和驱动程序日志,以更好地了解情况。您可以从代码中打印内容并在执行程序日志中查看,以便更深入地了解代码的作用。