我有以下使用spark和Java 8的代码。
JavaRDD<AdLog> accessLogs = logLines.map(adLog::parseFromLogLine).cache();我正在尝试将其转换为Java 7。我为大多数代码找到了替代方法,但我找不到适用于这行代码的替代方法。parseFromLogLine是类AdLog中的一个方法,adLog是该类的一个对象。当遇到一行文本时,它应该调用AdLog类中的parseFromLogLine方法。该方法返回一个新的AdLog对象。我如何使用Java7来实现这一点。任何帮助都将不胜感激。提前谢谢。
发布于 2016-11-14 17:21:16
您可以使用Guava函数来帮助您解决此问题。(https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Functions.html)
在一个新类中定义它,使用AdLog对象作为输入和AdLog作为结果(Function<AdLog, AdLog>)进行初始化,然后实现apply方法,该方法将Adlog对象作为输入,并返回一个Adlog对象。在apply方法中,调用parseFromLogLine()。
public class AdLogFunction implements Function<AdLog, AdLog> {
@Override
public AdLog apply(AdLog input) {
return input.parseFromLogLine();
}
}完成这个类之后,您就可以在代码中轻松地使用它了
发布于 2019-06-12 19:39:44
如果logLines RDD的类型为AdLog,则
logLines.map(new Function<AdLog, AdLog>() {
@Override
public AdLog call(AdLog adlog) throws Exception {
return adLog.parseFromLogLine();
});spark中的Java 7方式。
map方法的参数是函数类型,在Java7中可以像下面这样传递(匿名内部类)。
rdd.map(new Function<InputType, ReturnType>() {
@Override
public ReturnType call(InputType s) throws Exception {
.......
return op;
}
});https://stackoverflow.com/questions/40585098
复制相似问题