Eu sou um novato em scala que está tendo dificuldades como que deve ser uma simples linha de código. Eu faço uma operação .groupBy e fecho "it", mas o compilador reclama de um "tipo de parâmetro ausente" e não tenho idéia de como corrigi-lo. Aqui está o código exato (ele está em uma rede diferente, então eu tenho que redigitar - desculpe qualquer erro de digitação):
val rddSAInCache: RDD[Map[String, Any]] = getCache(SAInCacheExported, rddconfig)
.filter(it => it.path(EventType).getOrElse(NONE) == "SAInCache")
.map(it =>
Map(
("SAInCache" -> it.path(Time).getOrElse(NONE)),
(RequestID -> it.path(RequestID).getOrElse(NONE))
)
)
.groupBy(it => it.path(RequestID.getOrElse(NONE))
O compilador é capaz de inferir que "it" é um Map [String, Any] no filtro e no mapa, mas não no groupBy. Por quê??
Respostas:
2 para resposta № 1Mais uma sugestão do que uma resposta:
Tente dividir a chamada em cadeia:
val foo = rdd map f
val bar = foo groupBy g
Obtenha o tipo de foo no REPL.
Você está solicitando que ele resolva o tipo de resultado do mapa, que é um Mapa, junto com o groupBy, que está sobrecarregado e carrega implícitos.
Sem saber muito sobre a API, não me surpreenderia se um parâmetro do tipo não fosse inferível.