【发布时间】:2017-09-03 17:32:42
【问题描述】:
我需要为 Scala Spark 过滤器使用测试器,测试器实现 java 的 Predicate 接口并通过参数接收特定的类名。 我正在做这样的事情
val tester = Class.forName(qualifiedName).newInstance().asInstanceOf[Predicate[T]]
var filtered = rdd.filter(elem => tester.test(elem))
问题是在运行时我有一个 Spark“TaskNotSerializable Exception”,因为我的特定 Predicate 类不是 Serializable。
如果我这样做了
val tester = Class.forName(qualifiedName).newInstance()
.asInstanceOf[Predicate[T] with Serializable]
var filtered = rdd.filter(elem => tester.test(elem))
我得到同样的错误。 如果我在 rdd.filter 中创建测试器调用它可以工作:
var filtered = rdd.filter { elem =>
val tester = Class.forName(qualifiedName).newInstance()
.asInstanceOf[Predicate[T] with Serializable]
tester.test(elem)
}
但我会创建一个对象(也许是广播)进行测试。我该如何解决?
【问题讨论】:
标签: java scala apache-spark serialization serializable