2015-01-20 2 views
0

Я новичок scala, у которого есть трудное время с тем, что должно быть простой строкой кода. Я выполняю операцию .groupBy и закрываю «это», но компилятор жалуется на «отсутствующий тип параметра», и я понятия не имею, как его исправить. Вот точный код (это в другой сети, так что я должен перепечатывать - извините опечаток):«Отсутствует тип параметра» в groupBy

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

компилятор может сделать вывод, что «это» является карта [String, Any] и в фильтре и карту, но не группуBy. Зачем??

+0

«groupBy» после «map», поэтому 'it' является тогда« Map », который не имеет метода' .path'. Может быть, это настоящая ошибка, и компилятор просто запутывается, пытаясь вывести тип кода, который не может быть прав? – lmm

+0

Мы расширили карту, чтобы иметь метод пути. Это не проблема. – user1660256

ответ

2

больше, чем предложение ответа:

Try раскалывается цепного призывание:

val foo = rdd map f 
val bar = foo groupBy g 

Получить тип обув в REPL.

Вы просите его решить тип результата карты, которая представляет собой карту, вместе с groupBy, которая сильно перегружена и несет имплициты.

Не зная о API, меня не удивит, если тип param не является бесплодным.

+0

Вот что я в итоге сделал, разделив цепь. Благодаря! – user1660256