Целью является реализация различных классов типов (таких как Semigroup, Monad, Functor и т. Д.), Предоставляемых Scalaz для RDD Spark (распределенная коллекция). К сожалению, я не могу сделать ни один из классов типов, которые бы занимали более высокие типы (например, Monad, Functor и т. Д.), Чтобы хорошо работать с RDD.Классы классов Scalaz для Apache Spark RDD
РД определен (упрощенно) как:
abstract class RDD[T: ClassTag](){
def map[U: ClassTag](f: T => U): RDD[U] = {...}
}
Полный код для антирадаров можно найти here.
Вот один пример, который работает отлично:
import scalaz._, Scalaz._
import org.apache.spark.rdd.RDD
implicit def semigroupRDD[A] = new Semigroup[RDD[A]] {
def append(x:RDD[A], y: => RDD[A]) = x.union(y)
}
Вот один пример, который не работает:
implicit def functorRDD = new Functor[RDD] {
override def map[A, B](fa: RDD[A])(f: A => B): RDD[B] = {
fa.map(f)
}
}
Это терпит неудачу с:
error: No ClassTag available for B fa.map(f)
Ошибка является довольно ясный. Карта, реализованная в RDD, ожидает ClassTag (см. Выше). Функтор ScalaZ/monads и т. Д., Не имеют ClassTag. Возможно ли сделать эту работу без изменения Scalaz и/или Spark?
Это был мой вывод. – marios