我有一个名为“trimMap”的JavaPairRDD,其每一行如下
key,lat1,lon1,val1,lat2,lon2,val2,dist,variogram,1
------------------------------------------------------------
4,213,218,482.6,226,221,800.1,18.384776310850235,100806.25,1
最后一个用于计算特定密钥的条目数。我写的代码如下
JavaPairRDD<String, String> counts = trimMap.reduceByKey(new Function2<String, String, String>(){
@Override
public String call(String a, String b) throws Exception {
String[] firstSplit = a.split(",");
//String[] secondSplit = b.split(",");
//String first = firstSplit[8];
//String second = secondSplit[8];
return Integer.toString(firstSplit.length);//Integer.toString((Integer.parseInt(first)+Integer.parseInt(second)));
}
});
我想添加一些。但是当我打印firstSplit或secondSplit的长度时,它给出1,而我预期的长度是8。
〜此致 CHANDAN
答案 0 :(得分:1)
值得庆幸的是,Spark有一个内置函数来计算每个键出现的次数,我们可以使用countByKey()
http://spark.apache.org/docs/latest/api/java/org/apache/spark/api/java/JavaPairRDD.html#countByKey()(它返回要计数的键的映射)。如果你想以你的方式这样做(例如,如果它的值不是1)你可能想要查看aggregateByKey
http://spark.apache.org/docs/latest/api/java/org/apache/spark/api/java/JavaPairRDD.html#aggregateByKey(U,org.apache.spark.api .java.function.Function2,org.apache.spark.api.java.function.Function2)(这样你就不必做任何事都是字符串的时髦事物。)