2017-08-27 3 views
1

Ich versuche RDD in einer Spark HList von Shapeless zu verwenden, würde Ich mag die toList Methode verwenden, die die folgenden impliziten erfordert:Shapeless ToTraversable ist nicht serialisable

implicit ev2: ToTraversable.Aux[InType, List, OutType] 

Allerdings, wenn ich diese implizite passieren zu die RDD, wirft es eine NotSerializableException:

Caused by: java.io.NotSerializableException: scala.collection.generic.GenTraversableFactory$$anon$1 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 

gibt es eine alternative Art und Weise toList in Shapeless oder eine Art und Weise zu erreichen, ein implizites zu schaffen, die serialisable ist?

Antwort

1

Nachdem einige der unförmigen Codelese Throught fand ich in der tests, dass die Umgehung dieses implizite CanBuildFrom in Rahmen zu setzen ist für ToTraversable:

implicit def listSerializableCanBuildFrom[T]: CanBuildFrom[List[T], T, List[T]] = 
    new CanBuildFrom[List[T], T, List[T]] with Serializable { 
     def apply(from: List[T]) = from.genericBuilder[T] 

     def apply() = List.newBuilder[T] 
    } 
Verwandte Themen