对不起,我是一个新的学习者,现在我想以正确的格式打印一个rdd,但结果是这样的:
(200412169,([Ljava.lang.String;@7515eb2d,[Ljava.lang.String;@72031368))
(200412169,([Ljava.lang.String;@7515eb2d,[Ljava.lang.String;@27ef4b52))
我的rdd是
Array[(String, (Array[String], Array[String]))] =
Array(
(200412169,(Array(gavin),Array(1, 24, 60, 85, 78))),
(200412169,(Array(gavin),Array(2, 22, 20, 85, 78))),
(200412166,(Array(gavin3),Array(1, 54, 80, 78, 98))),
)
我希望像那样打印出来:
200412169 gavin 2 22 20 85 78
200412169 gavin 1 24 60 85 78
有人可以帮助我,非常感谢。
答案 0 :(得分:6)
奇怪的打印是在Java数组上调用{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW",
"property": "myNewRemoteMethod",
"accessType": "EXECUTE"
}
的结果。要获得一个很好的以制表符分隔的打印输出,您可以将每个记录映射到符合您喜好的字符串,如:
toString
或者,如果您确实想要保留RDD的结构,只需在打印时看到它的正确表示,您只需使用Scala列表转换数组(带有不那么有用的toString): / p>
rdd.map { case (a, (arr1, arr2)) => (a +: arr1) ++ arr2 } // "flatten" into single array
.map(_.mkString("\t")) // combine into Tab-separated string
.foreach(println)
// 200412166 gavin3 1 54 80 78 98
// 200412169 gavin 2 22 20 85 78
// 200412169 gavin 1 24 60 85 78
答案 1 :(得分:0)
您正在查看结果(200412169,([Ljava.lang.String;@7515eb2d,[Ljava.lang.String;@72031368))
只是因为它调用tostring
,但在Scala中查看RDD
的结果,您必须使用mkString
。
如果要查看RDD的内容,一种方法是使用collect()
myRDD.collect().foreach(println)
当RDD有更多行使用take()
时只打印少量。
myRDD.take(n).foreach(println)
示例:
val input=sc.parallelize(List(1,2,3,4,5))
print(input.collect().mkString(","))