[英]How to filter RDDs using count of keys in a map
我有以下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个(键,值)对,第二个RDD具有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中的键数,然后根据键数进行过滤?
您可以在Spark中使用aggregateByKey来计算键的数量。
您应该在您的Tuple2(count, List[List[Row]])
创建一个Tuple2(count, List[List[Row]])
。 通过reduceByKey可以实现相同的目的 。
阅读这篇文章,比较这两个功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.