Scala中的Apache Spark不能打印rdd值

时间:2017-04-28 06:32:22

标签: scala apache-spark pyspark

我也是Spark和Scala的新手,所以这可能是一个非常基本的问题。

我创建了一个包含4行单词的文本文件。其余代码如下:

val data = sc.textFile("file:///home//test.txt").map(x=> x.split(" "))

println(data.collect)
println(data.take(2))
println(data.collect.foreach(println))

以上所有“println”命令产生的输出为:[Ljava.lang.String; @ 1ebec410

任何想法如何显示rdd的实际内容,我甚至尝试过“saveAstextfile”,它也保存了与java相同的行...

我正在使用Intellij IDE进行spark scala,是的,我已经浏览了与此相关的其他帖子,但没有帮助。提前感谢你

2 个答案:

答案 0 :(得分:1)

RDD的最终返回类型为RDD[Array[String]]以前您打印的Array[String]打印出类似[Ljava.lang.String;@1ebec410)的内容,因为数组的toString()方法未被覆盖,因此它只是打印对象的HASHCODE

您可以尝试使用隐式方法Array[String]List[String]投射到toList,现在您将能够看到列表中的内容,因为scala中列表的toString()方法在重写并显示内容

这意味着如果你尝试

  

data.collect.foreach(arr => println(arr.toList))

这将显示内容或@Raphael建议的内容 data.collect().foreach(arr => println(arr.mkString(", "))) 这也可以,因为arr.mkString(", ")会将数组转换为字符串,每个元素由,分隔

希望这会让你怀疑 感谢

答案 1 :(得分:0)

data的类型为RDD[Array[String]],您打印的内容是toStringArray[String])的[Ljava.lang.String;@1ebec410,请尝试以下操作:

data.collect().foreach(arr => println(arr.mkString(", ")))