【问题标题】:Overloading when trying to pass closure as function to JavaDStream尝试将闭包作为函数传递给 JavaDStream 时重载
【发布时间】:2016-05-13 10:48:14
【问题描述】:

在我的 groovy (spock) 单元测试中,我构建了一个 JavaDStream,然后我尝试用它做一些事情,依次处理每个 RDD。当我尝试使用 foreachRDD 或其他类似方法,通过传入一个 groovy 闭包将函数作为参数,我会遇到重载问题:

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()})

是什么导致了上述输出。

【问题讨论】:

    标签: java groovy apache-spark closures


    【解决方案1】:

    问题是有多个类(FunctionFunction2VoidFunctionVoidFunction2),Groovy 可以根据您调用的方法强制关闭。它无法决定使用哪个,因此 Groovy 放弃并要求您澄清。

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

    使用as 关键字,您可以告诉Groovy 强制闭包进入哪个类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2012-10-15
      • 1970-01-01
      • 2019-09-14
      • 2019-11-01
      相关资源
      最近更新 更多