Spark:RDD.map/mapToPair如何与Java一起使用

时间:2016-12-09 11:05:37

标签: java apache-spark tuples rdd keyvaluepair

我在文本文件中有一些cw(Integer i,String word)和 i word 的出现次数。

我想简单地为每对配对一个固定数字的新对c1(整数i,1)。

这似乎真的微不足道,但我还没有理解map / mapToPair功能如何实际运作。

JavaPairRDD<Integer, Integer> c1 = cw.map(??? -> new Tuple2<Integer, Integer>(??, 1));

我正在使用Java-8。

3 个答案:

答案 0 :(得分:5)

如果我理解正确,你的JavaPairRDD低于。

JavaPairRDD<Integer, String> cw = ...;

现在,您要在JavaPairRDD下创建第二个值为1。

JavaPairRDD<Integer, Integer> c1;

为了实现这一目标,首先必须从cw JavaPairRDD中提取JavaRDD,为此您必须调用map函数,如下所示。我们将从pair中提取第一个值。

JavaRDD<Integer> cw1 = cw.map(tuple -> tuple._1());

现在,您将使用mapToPair函数从JavaRDD创建新的JavaPairRDD。

JavaPairRDD<Integer, Integer> c1 = cw1.mapToPair(i -> new Tuple2<Integer, Integer>(i, 1));

在单行中你可以像

一样写
JavaPairRDD<Integer, Integer> c1 = cw.map(tuple -> tuple._1()).mapToPair(i -> new Tuple2<Integer, Integer>(i, 1));

答案 1 :(得分:0)

这是你可以尝试的:

JavaPairRDD<Integer, Integer> tuples = filtered.mapToPair(
                                            f -> new Tuple2<Integer, Integer>(
                                                       Integer.parseInt(f[0]), 
                                                       Integer.parseInt(f[1])
                                       ));

答案 2 :(得分:-1)

简单地说...... cw.mapValues(v -> 1);

来自JavaPairRDD.mapValues()的api文档...

  

通过map函数传递键值对RDD中的每个值   不改变钥匙;这也保留了原始的RDD   分区。