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

时间:2015-10-27 23:22:50

标签: apache-spark 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

1 个答案:

答案 0 :(得分:1)

"正常"处理这个问题的方法是将外部类别定义为可服用的,除了测试之外,这是一个不好的做法,因为你不想发送大量的数据。