我有2个输入,其中第一个输入是流(比如input1),第二个输入是批处理(比如input2)。 我想弄清楚第一个输入中的键是否与第二个输入中的单个行或多个行匹配。 的进一步转化/逻辑取决于匹配的行数,是否单列匹配或多个行匹配(在第一输入ATLEAST一个键)如何确定DStream是否为空
if(single row matches){
// do something
}else{
// do something
}
代码,我试图到目前为止
val input1Pair = streamData.map(x => (x._1, x))
val input2Pair = input2.map(x => (x._1, x))
val joinData = input1Pair.transform{ x => input2Pair.leftOuterJoin(x)}
val result = joinData.mapValues{
case(v, Some(a)) => 1L
case(v, None) => 0
}.reduceByKey(_ + _).filter(_._2 > 1)
我已经完成了上面的编码。 当我做result.print时,如果所有的键只与input2中的一行相匹配,它将不会打印任何内容。 由于DStream可能有多个RDD,所以不知道如何确定DStream是否为空。如果这是可能的,那么我可以做一个检查。
非常感谢您的回复。在我的情况下,input1 RDD类型不同于input2 RDD类型。最后使用cogroups实现。 – Dazzler