从另一个元组列表中过滤元组的RDD

时间:2016-04-26 15:14:25

标签: scala apache-spark filter tuples rdd

我目前正在使用Spark和Scalacheck,我正在尝试过滤RDD [(A,Long)] (其中A是从Avro文件读取的寄存器,而Long是从zipWithUniqueId()函数获取的来自存储在缓冲区中的相同RDD的样本

我的目的是测试该样本的一些属性,一旦失败,再次在该RDD的样本中测试该属性,该样本不包含之前采样的任何值。 我将rdd存储在var中,所以一旦我过滤它就可以重新分配它。 我的代码是这样的:

val samplingSeed = new Random(System.currentTimeMillis()).nextLong()
val sampled = rdd.takeSample(withReplacement = false, bufferSize, samplingSeed)
val buffer: JQueue[(A, Long)] = new JConcurrentLinkedQueue[(A, Long)]

//Sampled as Array converts to queue
for (i <- 0 to sampled.length - 1)
 buffer.add(sampled(i).asInstanceOf[(A, Long)])

//rdd is assigned to a var for persistence
//filter here and leave out all the tuples in buffer based in the 
//Long  value in each tuple
 rdd= rdd.filter{foo}

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:0)

通常,可以使用广播变量来完成按集过滤:

bool isSSO = context.Ticket.Identity.HasClaim(c => c.Type == "IsSSO" && bool.Parse(c.Value));