将Scala表达式转换为Java 1.8

neu*_*use 5 java scala apache-spark

我正在尝试将此Scala表达式转换为Java:

val corpus: RDD[String] = sc.wholeTextFiles("docs/*.md").map(_._2)
Run Code Online (Sandbox Code Playgroud)

这就是我在Java中所拥有的:

RDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2);
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误a._2:.

lambda表达式中的错误返回类型:String无法转换为R.

如果我采用"超级"方法,这就是我所看到的:

package org.apache.spark.api.java.function;

import java.io.Serializable;

public interface Function<T1, R> extends Serializable {
        R call(T1 var1) throws Exception;
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*itz 5

在斯卡拉PairRDD是一个元组类型,您可以访问其成员_1_2.但是,Java没有内置元组,因此您必须使用方法来获取这些成员.它看起来应该是这样的,因为Java总是需要在任何函数上使用括号.

JavaRDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2());
Run Code Online (Sandbox Code Playgroud)

编辑:似乎在Scala中将一个隐式参数传递给该map方法,这意味着您必须在Java中显式传递它.请参阅此处获取Java Doc以及此处的Scala文档.

编辑2:经过几个小时的摸索,找到了答案,它必须是JavaRDD.