Java Spark:统计JavaPairRDD中Key出现次数的报错问题
问题分析与解决
你的代码错误出在reduceByKey的lambda表达式上,具体问题:
reduceByKey要求传入一个二元累加函数,需要接收两个同类型的Value参数并返回累加结果,但你只定义了一个参数p2,还错误引用了外部作用域的p变量,这会导致语法和逻辑错误。
修正后的代码
方式一:mapToPair转换后累加
JavaPairRDD<Integer, Integer> socials = media.mapToPair(p -> new Tuple2<>(p._1, 1)) .reduceByKey((a, b) -> a + b);
方式二:更简洁的mapValues转换
因为只需要把原Value替换为1,用mapValues比mapToPair更直观:
JavaPairRDD<Integer, Integer> socials = media.mapValues(v -> 1) .reduceByKey((a, b) -> a + b);
说明
两种方式最终都会生成<被关注者ID, 被关注次数>格式的JavaPairRDD<Integer, Integer>,每个Key对应的值就是该被关注者ID在原RDD中的出现次数。
内容的提问来源于stack exchange,提问作者user20020
相关产品推荐
相关产品推荐

