lin*_*uan 2 scala apache-spark
对不起,我是一个新的学习者,现在我想以正确的格式打印一个rdd,但结果是这样的:
(200412169,([Ljava.lang.String;@7515eb2d,[Ljava.lang.String;@72031368))
(200412169,([Ljava.lang.String;@7515eb2d,[Ljava.lang.String;@27ef4b52))
Run Code Online (Sandbox Code Playgroud)
我的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))),
)
Run Code Online (Sandbox Code Playgroud)
我想打印出来:
200412169 gavin 2 22 20 85 78
200412169 gavin 1 24 60 85 78
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我,非常感谢.
奇怪的打印是调用toString
Java数组的结果.要获得一个很好的以制表符分隔的打印输出,您可以将每个记录映射到符合您喜欢的字符串,例如:
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
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实想要保留RDD的结构,只需在打印时看到它的正确表示,您只需使用Scala列表转换数组(使用不那么有用的toString):
rdd.map { case (a, (arr1, arr2)) => (a, arr1.toList, arr2.toList) }
.foreach(println)
// (200412169,List(gavin),List(1, 24, 60, 85, 78))
// (200412166,List(gavin3),List(1, 54, 80, 78, 98))
// (200412169,List(gavin),List(2, 22, 20, 85, 78))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3513 次 |
最近记录: |