Spark Streaming 在 PairDStream 中为每个键获取一个元素

Spark Streaming get one element per key in PairDStream

简单的问题:有没有真正有效的方法来获得由每个键的一个键值对组成的 dstream?伪代码:

myKeyValueDStream = {(A,miao-1-3),
(A,miao-2-4),
(A,miao-5-6),
(B,bau-1-2),
(B,bau-3-4),
(C,cip-1-2),
(C,cip-3-4)}
singleLineDStream = myKeyValueDStream.takeOneElementPerKey();
//I don't care which one; the first one would be fine
singleLineDStream.print() // {(A,miao-1-3),(B,bau-1-2),(C,cip-1-2)}

我目前的解决方案(为 Java 7 道歉):

JavaPairDstream<String,String[]> singleLineDStream = pairdDstream.reduceByKey(new Function2<String[],String[],String[]>(){
        @Override
        public String[] call(String[] arg0, String[] arg1) throws Exception {
            return arg0;
        }
    });

是否有更好的方法为每个键取一个元素?使用您想要的任何语言来解决问题。

可以做的一件事是在 RDD 上使用 CollectAsMap 函数,将其用作包含集合中每个键的一个值的字典。之后,字典就可以转换成键值对的列表了。

如此 Pyspark Code Image

我会相信 maasg 并说确实如此,我在问题中给出了答案:

JavaPairDstream<String,String[]> singleLineDStream = pairdDstream.reduceByKey(new Function2<String[],String[],String[]>(){
    @Override
    public String[] call(String[] arg0, String[] arg1) throws Exception {
        return arg0;
    }
});