[英]In Apache Spark cogroup, how to make sure 1 RDD of >2 operands is not moved?
[英]Apache Spark join/cogroup on generic type RDD
我對RDD
上的join
或cogroup
方法有問題。 詳細地說,我必須加入兩個RDD
,其中之一是與通配符一起使用的通用類型的RDD
。
val indexedMeasures = measures.map(m => (m.id(), m)) // RDD[(String, Measure[_]]
val indexedRegistry = registry.map(r => (r.id, r)) // RDD[(String, Registry)]
indexedRegistry.cogroup(indexedMeasures)
最后一條語句給出了編譯時錯誤,如下所示:
no type parameters for method cogroup: (other: org.apache.spark.rdd.RDD[(String, W)])org.apache.spark.rdd.RDD[(String, (Iterable[Registry],
Iterable[W]))] exist so that it can be applied to arguments (org.apache.spark.rdd.RDD[(String, Measure[?0]) forSome { type ?0 }]) --- because --- argument expression's type is not compatible
with formal parameter type; found : org.apache.spark.rdd.RDD[(String, Measure[?0]) forSome { type ?0 }] required: org.apache.spark.rdd.RDD[(String, ?W)] Note: (String,
Measure[?0]) forSome { type ?0 } >: (String, ?W), but class RDD is invariant in type T. You may wish to define T as -T instead. (SLS 4.5)
這里發生了什么? 為什么我不能cogroup
RDD
使用一個通用的通配S型?
感謝您的所有回復。
該問題在《 爭取更高種類的類型的平等權利》中有闡述
泛型是當代OO語言(例如Java,C#或Scala)非常流行的功能。 但是,他們缺乏對通用性的支持。 問題在於它們僅支持對適當類型的抽象,而不對泛型類型的抽象。 這種限制使得不可能例如為Iterable定義精確的接口,這是Scala集合API中的核心抽象。 我們在Scala 2.5中實現了“類型構造函數多態性”,從根本上解決了這個問題,從而大大減少了類型簽名和代碼的重復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.