如何在 scalatest 期间将函数传递给 Spark 转换?

How do I pass functions into Spark transformations during scalatest?

我正在使用 Flatspec 进行 运行 测试并不断遇到错误,因为我将一个函数传递给 map。我遇到过几次这个问题,但只是通过使用匿名函数找到了解决方法。在这种情况下,这似乎是不可能的。有没有一种方法可以将函数传递给 scalatest 中的转换?

代码:

“test” should “fail” in { 
  val expected = sc.parallelize(Array(Array(“foo”, “bar”), Array(“bar”, “qux”)))

  def validateFoos(firstWord: String): Boolean = {
    if (firstWord == “foo”) true else false
  }

 val validated = expected.map(x => validateFoos(x(0)))
  val trues = expected.map(row => true)

  assert(None === RDDComparisons.compareWithOrder(validated, trues))
}

错误: org.apache.spark.SparkException: Task not serializable

*这使用了 Holden Karau 的 Spark 测试基地: https://github.com/holdenk/spark-testing-base

"normal" 处理这个的方法是将外部 class 定义为可序列化的,这在除了测试之外的任何事情中都是不好的做法,因为你不想运送很多周围的数据。