Я хочу использовать библиотеку Java в своей программе Scala. Библиотека содержит общий класс, который является частью других классов:
package java.items;
public class Item<T extends Comparable> implements Comparable<Item> {
private T id;
...
}
public final class Itemset{
private List<Item> items = new ArrayList<Item>();
public List<Item> getItems() { return items; }
...
}
public class Sequence {
private final List<Itemset> itemsets = new ArrayList<Itemset>();
public List<Itemset> getItemsets() { return itemsets; }
...
}
В моем коде Scala я перебираю различные объекты, и мне нужно создать экземпляр хэш-карты типа [T, Int]
для хранения идентификаторов со счетчиком:
import java.items._
object ConvertSequence {
def ConvertSequence (dataset: RDD[(Sequence)], sc: SparkContext) {
sc.broadcast(dataset.flatMap(r => {
val itemCounts = new HashMap[AnyRef, Int]
for (itemset <- r.getItemsets) {
for (item <- itemset.getItems) {
val i = itemCounts.getOrElse(item.getId, 0)
itemCounts.update(item.getId, i + 1)
}
}
itemCounts
}).
map(r => (r._1, (r._2, 1))).
reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2)).
sortBy(r => (r._2._1, r._1))
zipWithIndex().
collect({ case (k, v) => (k._1, v)})
)
}
Я не знаю, какой тип передать конструктору хэш-карты (T
недоступен из моего объекта Scala, так как набирается только Item
). Я пробовал AnyRef
, но при компиляции получаю ошибку:
[ERROR] error: type mismatch;
[INFO] found : ?0
[INFO] required: AnyRef
[INFO] Note that ?0 is unbounded, which means AnyRef is not a known parent.
[INFO] Such types can participate in value classes, but instances
[INFO] cannot appear in singleton types or in reference comparisons.
[INFO] val i = itemCounts.getOrElse(item.getId, 0)
[INFO] ^
[ERROR] one error found
Как я могу управлять полиморфизмом между моим кодом Java и Scala?
r.getItemsets
иitemset.getItems
? Каковы параметры метода, в котором находится ваш код Scala? - person Dan Getz   schedule 02.03.2015itemCounts.getOrElse(item.getId.toString, 0)
, а в вашей ошибке этоitemCounts.getOrElse(item.getId, 0)
. - person Dan Getz   schedule 03.03.2015sortBy
и/или каким должен быть возвращаемый типsortBy
? - person Dan Getz   schedule 03.03.2015