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 函数,将其用作包含集合中每个键的一个值的字典。之后,字典就可以转换成键值对的列表了。
我会相信 maasg 并说确实如此,我在问题中给出了答案:
JavaPairDstream<String,String[]> singleLineDStream = pairdDstream.reduceByKey(new Function2<String[],String[],String[]>(){
@Override
public String[] call(String[] arg0, String[] arg1) throws Exception {
return arg0;
}
});
简单的问题:有没有真正有效的方法来获得由每个键的一个键值对组成的 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 函数,将其用作包含集合中每个键的一个值的字典。之后,字典就可以转换成键值对的列表了。
我会相信 maasg 并说确实如此,我在问题中给出了答案:
JavaPairDstream<String,String[]> singleLineDStream = pairdDstream.reduceByKey(new Function2<String[],String[],String[]>(){
@Override
public String[] call(String[] arg0, String[] arg1) throws Exception {
return arg0;
}
});