如何在终端中打印ApacheSpark RDD的内容?

3

这是我第一次使用Scala和ApacheSpark进行项目。我试图在终端运行我的代码时打印矩阵的内容,但目前为止尝试的一切都没有成功。

相反,我只得到了这个打印结果:

org.apache.spark.mllib.linalg.distributed.MatrixEntry;@71870da7
org.apache.spark.mllib.linalg.distributed.CoordinateMatrix@1dcca8d3

我只是使用println(),但当我使用collect()时,结果也不太好。


1
一般来说,你不需要使用RDD。如果某个数据足够小,可以直接打印输出。如果是最终结果或者是一个小的子集,你可以收集并打印本地对象。 - zero323
4个回答

1
默认的toString方法会打印出类名和内存地址。
org.apache.spark.mllib.linalg.distributed.MatrixEntry;@71870da7

你需要找到一种方法来遍历矩阵并打印每个元素。

1

在 @zero323 的评论基础上(除此之外,您是否愿意提供一个答案?):给定一个 RDD[SomeType],您可以调用

 rdd.collect()

或者

 rdd.take(k)

然后,您可以使用依赖于rdd内容类型的普通toString()方法打印结果。因此,如果SomeType是List[Double],则
println(s"${rdd.collect().mkString(",")}") 

会给你一个以逗号分隔的单行输出结果。

@zero323提出的另一个考虑是:“你真的想打印出rdd的内容吗?”你更可能只想要一个摘要 - 比如

println(s"Number of entries in RDD is ${rdd.count()}")

0

Scala>val rdd1 = sc.parallelize(List(1,2,3,4)).map(_*2)

打印RDD中的数据

Scala> rdd1.collect().foreach(println)

输出: 2 4 6 8


0

像这样迭代rdd

rdd.foreach(println)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接