【发布时间】:2017-01-11 13:26:10
【问题描述】:
我有以下 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 个 (key,value) 对,第二个有 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中key的数量,然后根据key的数量进行过滤?
【问题讨论】:
-
在您的示例中,您显示了 List ,其中包含相同键的相同元素。你试过 reducebykey 吗?
-
键是相同的,但值是不同的,如您所见。我需要所有值,当键数 > 1 时,reduceByKey 对此不起作用
-
这些都是同一个RDD的打印吗?看起来您的
List[Row]不是持有这些多个元组的人,看起来 RDD 内部只是包含不同数量的元组。 -
为什么不直接使用
count,即listOfMappedCalls.filter(_.count >= 2)?
标签: scala apache-spark