简单的问题:任何实际有效的方法来获得每个密钥由一个键值对组成的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;
}
});
是否有更好的方法为每个键获取一个元素?使用您想要的任何语言的解决方案。
答案 0 :(得分:0)
可以做的一件事是在RDD上使用 CollectAsMap 函数将其用作包含集合中每个键的一个值的Dictionary。之后,可以将字典转换为具有键值对的列表。
一样答案 1 :(得分:0)
我会信任maasg,并说我确实在我的问题中给出了答案:
JavaPairDstream<String,String[]> singleLineDStream = pairdDstream.reduceByKey(new Function2<String[],String[],String[]>(){
@Override
public String[] call(String[] arg0, String[] arg1) throws Exception {
return arg0;
}
});