gpt4 book ai didi

java - Java 中的通配符不适用于 Spark cogroup 函数

转载 作者:行者123 更新时间:2023-11-30 10:28:45 26 4
gpt4 key购买 nike

我正在尝试在 Java 中将两个 RDD 组合在一起,其中一个 RDD v2 的类型如下:JavaPairRDD<Key, ? extends Value> (实际上它是用? extends定义的,因为它是一个函数参数)。

然后当我将它们组合在一起时,例如:

void f(JavaPairRDD<Key, ? extends Value> v2){
TYPE v = v1. cogroup(v2);
// ERROR. I cannot get the correct type for this cogroup function
}

当我尝试从此 cogroup 函数获取返回值时,编译器会报错,因为它无法推断出 v2 的类型。

有趣的是,如果我不关心返回值,只需调用:

v1.cogroup(v2).collectAsMap();

看来可行。至少可以编译。

似乎java只能在函数参数中定义为通配符时才接受通配符(如)作为参数。我说得对吗?

请问有没有其他方法可以正确的做?或者也许我不应该这样做,这里到底出了什么问题?

非常感谢。

最佳答案

似乎 java 只能在函数参数中定义为通配符时才接受通配符(如 ? extends Base)作为参数。

cogroup是在scala中定义的,由于scala的类型系统支持协变继承,其接口(interface)不包含java的keyward extends

  def cogroup[W](other: JavaPairRDD[K, W]): JavaPairRDD[K, (JIterable[V], JIterable[W])] =
fromRDD(cogroupResultToJava(rdd.cogroup(other)))

但是在Java中,如果函数签名中的参数没有通配符,则调用时的参数不能是某种定义为通配符的类型。

关于java - Java 中的通配符不适用于 Spark cogroup 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44414878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com