【发布时间】:2015-03-21 01:00:32
【问题描述】:
使用 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),如果有,怎么做?如果不是,pairRDD的目的是什么?
【问题讨论】:
标签: scala apache-spark rdd key-pair