如何使用地图中的键计数来过滤RDD

时间:2016-09-03 16:41:28

标签: scala apache-spark

我有以下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中的键数,然后根据键的数量进行过滤?

1 个答案:

答案 0 :(得分:1)

您可以在Spark中使用aggregateByKey来计算密钥数。

您应该在合并功能中创建Tuple2(count, List[List[Row]])reduceByKey可以实现同样的目标。

阅读比较这两个功能的this帖子。