Spark:用于打印RDD的功能[A]

时间:2018-07-25 13:53:57

标签: scala apache-spark

我正在编写一个函数,该函数接收RDD和数字整数n,并打印接收到的RDD的n元素。

RDD参数没有预定的类型,并且我使用模式匹配,希望根据RDD以不同的方式打印。

例如,如果我有这个:myRDD:RDD[(String, Array[String])]。当我调用printRddContent(myRDD)时,我想以这种方式进行打印(在函数外,这样效果很好):

anRdd.map { case (a, arr) => (a, arr.toList) }.collect().take(n).foreach(println)

依此类推,具有不同的模式。

到目前为止,这是我的代码:

  def printRddContent[A](anRdd: RDD[A], n: Int) = {  
    anRdd match {
      case r1: RDD[(String, Array[String])] => anRdd.map { case (a, arr) => (a, arr.List) }.take(n).foreach(println)
      case _ => "case clause"
    }
  }

但是.toList显示一条消息:Cannot resolve symbol toList。我不明白为什么这在函数内部不起作用。

1 个答案:

答案 0 :(得分:2)

这是基于您提供的代码的解决方案:

  def printRddContent[A](anRdd: RDD[A], n: Int) = {
    anRdd match {
      case r1: RDD[(String, Array[String])] => r1.asInstanceOf[RDD[(String, Array[String])]].map { case (a, arr) => (a, arr.toList)}.take(n).foreach(println)
      case _ => "case clause"
   }
 }

在这种情况下,使用asInstanceOf是安全的,因为我们已经检查了RDD是否完全对应于类型(通过模式匹配)