Apache Spark(Scala) - 打印RDD / pairRDD的1个条目

时间:2015-03-20 16:26:30

标签: scala apache-spark rdd key-pair

使用RDD时,我已按键将项目分组到RDD中。

    val pairRDD = oldRDD.map(x => (x.user, x.product)).groupByKey

pairRDD的类型为:RDD(Int, Iterable[Int]))

我遇到的麻烦就是访问特定元素。当我无法通过密钥访问RDD中的项目时,拥有密钥有什么意义?

在我将filter RDD归结为单个项目时,我仍然有一个RDD,因此我必须在RDD上执行foreach打印出来:

    val userNumber10 = pairRDD.filter(_._1 == 10)
    userNumber10.foreach(x => println("user number = " + x._1))

或者,我可以filter RDD然后take(1)返回一个大小为1的数组:

    val userNumber10Array = pairRDD.filter(_._1 == 10).take(1)

除此之外,我可以选择返回数组的第一个元素:

    val userNumber10Array = pairRDD.filter(_._1 == 10).take(1)(0)

根据需要返回该对。但... 很明显,这是不方便的,我猜想这不是一个RDD的用法!

为什么我这样做你可能会问!它出现的原因是因为我只是想"看到"我的RDD中有什么用于我自己的测试目的。那么,有没有办法访问RDD中的单个项目(更严格来说是一个pairRDD),如果是这样,怎么样?如果没有,对RDD的目的是什么?

1 个答案:

答案 0 :(得分:4)

使用属于lookup的{​​{1}}功能。从官方文档:

  

返回RDD中键值的列表。这个操作是   如果RDD通过仅搜索具有已知分区器,则有效地完成   键映射到的分区。

https://spark.apache.org/docs/0.8.1/api/core/org/apache/spark/rdd/PairRDDFunctions.html

如果您只想查看RDD的内容,只需致电PairRDDFunctions