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

rug*_*rag 4 java tuples keyvaluepair apache-spark rdd

我有一些对CW(整数I,串词)数的出现次数的单词在文本文件中.

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

这似乎是微不足道的,但我还没有理解map/mapToPair函数实际上是如何工作的.

JavaPairRDD<Integer, Integer> c1 = cw.map(??? -> new Tuple2<Integer, Integer>(??, 1));
Run Code Online (Sandbox Code Playgroud)

我正在使用Java-8.

aba*_*hel 8

如果我理解正确的话,那你就得到了JavaPairRDD.

JavaPairRDD<Integer, String> cw = ...;
Run Code Online (Sandbox Code Playgroud)

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

JavaPairRDD<Integer, Integer> c1;
Run Code Online (Sandbox Code Playgroud)

为了得到这个,首先你必须从cwJavaPairRDD中提取JavaRDD ,为此你必须调用map如下的函数.我们将从对中提取第一个值.

JavaRDD<Integer> cw1 = cw.map(tuple -> tuple._1());
Run Code Online (Sandbox Code Playgroud)

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

JavaPairRDD<Integer, Integer> c1 = cw1.mapToPair(i -> new Tuple2<Integer, Integer>(i, 1));
Run Code Online (Sandbox Code Playgroud)

在单行中你可以写它

JavaPairRDD<Integer, Integer> c1 = cw.map(tuple -> tuple._1()).mapToPair(i -> new Tuple2<Integer, Integer>(i, 1));
Run Code Online (Sandbox Code Playgroud)