Scala 不成形的ToTraversable不可序列化

Scala 不成形的ToTraversable不可序列化,scala,apache-spark,shapeless,Scala,Apache Spark,Shapeless,我试图使用火花中的ShapelessRDD中的HList,我想使用toList方法,该方法要求以下隐式: implicit ev2: ToTraversable.Aux[InType, List, OutType] 但是,如果我将此隐式传递给RDD,它将抛出一个NotSerializableException: Caused by: java.io.NotSerializableException: scala.collection.generic.GenTraversableFactory$

我试图使用火花中的Shapeless
RDD
中的
HList
,我想使用
toList
方法,该方法要求以下隐式:

implicit ev2: ToTraversable.Aux[InType, List, OutType]
但是,如果我将此隐式传递给RDD,它将抛出一个
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)

是否有一种替代方法来实现无形状的
toList
,或者提供可序列化的隐式方法?

在阅读了我在中发现的一些无形状代码后,解决方法是将此隐式
CanBuildFrom
放在
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]
    }