无法使用take()操作打印RDD内容

时间:2018-09-06 03:51:03

标签: scala apache-spark rdd

当我尝试使用first()操作打印RDD内容时,可以使用foreach循环进行打印。但是使用take()操作不会打印出内容。

使用first()

myRDD.first().foreach(println)
1
2013-07-25 00:00:00.0
11599
CLOSED

使用take():

myRDD.take(5).foreach(println)
[Ljava.lang.String;@23a5818e
[Ljava.lang.String;@4715ae33
[Ljava.lang.String;@9fc9f91
[Ljava.lang.String;@1fac1d5c
[Ljava.lang.String;@108a46d6

我希望输出与first()相同,的确如此。但是我得到了不同的输出。

1 个答案:

答案 0 :(得分:3)

我假设您的RDD的类型为org.apache.spark.rdd.RDD[Array[String]]。在这种情况下,first方法的返回类型为Array[String],而foreach(println)打印RDD中第一个字符串数组的元素。 但是take(5)的返回类型为Array[Array[String]]foreach(println)打印出5个元素。

要获得firsttake(5)的相同输出,请使用

println(myRDD.first())
myRDD.take(5).foreach(println)

myRDD.first().foreach(println)
myRDD.take(5).foreach(_.foreach(println))