我有以下RDD
val reducedListOfCalls: RDD[(String, List[Row])]
RDD是:
[(923066800846, List[2016072211,1,923066800846])]
[(923027659472, List[2016072211,1,92328880275]),
923027659472, List[2016072211,1,92324440275])]
[(923027659475, List[2016072211,1,92328880275]),
(923027659475, List[2016072211,1,92324430275]),
(923027659475, List[2016072211,1,92334340275])]
如上所示,第一个RDD有1个(键,值)对,第二个有2个,第三个有3对。
我想删除所有少于2个键值对的RDD。 RDD预期的结果是:
[(923027659472, List[2016072211,1,92328880275]),
923027659472, List[2016072211,1,92324440275])]
[(923027659475, List[2016072211,1,92328880275]),
(923027659475, List[2016072211,1,92324430275]),
(923027659475, List[2016072211,1,92334340275])]
我尝试了以下内容:
val reducedListOfCalls = listOfMappedCalls.filter(f => f._1.size >1)
但它仍然只给出了原始列表。过滤器似乎没有任何区别。
是否可以计算映射RDD中的键数,然后根据键的数量进行过滤?
答案 0 :(得分:1)
您可以在Spark中使用aggregateByKey来计算密钥数。
您应该在合并功能中创建Tuple2(count, List[List[Row]])
。 reduceByKey可以实现同样的目标。
阅读比较这两个功能的this帖子。