JavaPairRDD上的ReduceByKey函数给出值长度为1

时间:2015-03-27 11:41:18

标签: mapreduce apache-spark

我有一个名为“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

1 个答案:

答案 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)(这样你就不必做任何事都是字符串的时髦事物。)