RDD如何使用Set作为另一个RDD的过滤器

时间:2017-03-02 06:26:34

标签: scala apache-spark

我需要使用元组作为键来找到RDD的最大值。 原始RDD定义为: testRDD如下:

TestRDD(3,249345,038.9,1)
TestRDD(3,249345,785.59,2)
TestRDD(3,249345,584.9,3)
TestRDD(3,249345,427.5,4)
TestRDD(3,249345,410.71,5)

我需要根据元组(1,3)找到第二列的最大值 通过执行以下操作,我能够实现它:

val agg_rdd = TestRDD.map(d => ((d.col1,d.col3),(d.col2))).groupByKey()
val max_AggRDD = agg_rdd.map{case ((col1,col3),(col2)) => (col1,col3) -> col2.max}
val ids_maxAggRDD = max_AggRDD.collect.toSet

现在我需要使用ids_maxAggRDD的输出,其id定义为scala.collection.immutable.Set [((String,String),Long)]作为原始testRDD的过滤器。

我似乎无法使用该值来执行此操作。

 val Max_RDD = TestRDD.filter(v => ids_maxAggRDD.value.contains(v.col1,v.col3,v.col2)))
  1. 我应该将最大ID设置转换为
  2. 有没有更好的方法来实现我想要完成的目标?

1 个答案:

答案 0 :(得分:0)

我只需使用不带.value的包就能让它工作。不确定这是否是最好的方法

相关问题