[英]Apache Spark (Scala) - print 1 entry of an RDD / pairRDD
使用RDD时,我已按键将RDD中的项目分组。
val pairRDD = oldRDD.map(x => (x.user, x.product)).groupByKey
pairRDD
的类型为: RDD(Int, Iterable[Int]))
我遇到的麻烦仅仅是访问特定元素。 当我似乎无法通过密钥访问RDD中的项目时,拥有密钥有什么意义?
在开始的那一刻,我将RDD filter
为单个项目,但是我仍然有一个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)中的单个项目,如果可以,如何? 如果不是,pairRDD的目的是什么?
使用属于PairRDDFunctions
的lookup
功能。 从官方文档中:
返回RDD中键值的值列表。 如果RDD仅通过搜索键映射到的分区,就可以有效地完成此操作。
https://spark.apache.org/docs/0.8.1/api/core/org/apache/spark/rdd/PairRDDFunctions.html
如果只想查看RDD的内容,则只需调用collect
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.