2016-05-13 43 views
0

在我的groovy(spock)单元测试中,我构建了一个JavaDStream,然后尝试用它来处理每个RDD。当我尝试使用foreachRDD或接受一个函数作为参数通过传递常规闭合我得到过载问题的其他类似的方法:尝试将闭包作为函数传递给JavaDStream时重载

Cannot resolve which method to invoke for [class someClass] due to overlapping prototypes between: 
    [interface org.apache.spark.api.java.function.Function] 
    [interface org.apache.spark.api.java.function.Function2] 
    [interface org.apache.spark.api.java.function.VoidFunction] 
    [interface org.apache.spark.api.java.function.VoidFunction2] 

我试着做一些与此类似:

JavaDStream wordStream = buildWordStream(textInputStream) 
wordStream.foreachRDD({rdd,time -> println rdd.toString()}) 

这是什么导致了上述输出。

回答

0

的问题是有多个类(FunctionFunction2VoidFunctionVoidFunction2),它的Groovy可以迫使封盖进入基于你调用的方法。它不能决定使用哪一个,所以Groovy放弃并要求你澄清。

wordStream.foreachRDD {rdd,time -> println rdd.toString()} as Function2 

使用as关键字你可以告诉Groovy来迫使封盖进入哪一类。

相关问题