我也是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,是的,我已经浏览了与此相关的其他帖子,但没有帮助。提前感谢你
答案 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]]
,您打印的内容是toString
(Array[String]
)的[Ljava.lang.String;@1ebec410
,请尝试以下操作:
data.collect().foreach(arr => println(arr.mkString(", ")))