2015-10-27 57 views
0

我使用Flatspec來運行一個測試,並保持打錯誤,因爲我將一個函數傳遞給map。我遇到過這個問題幾次,但只是通過使用匿名函數找到了解決方法。這在這種情況下似乎不可能。是否有一種將函數傳遞給scalatest轉換的方法?如何在Scalatest中將函數傳遞給Spark轉換?

代碼:

「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

*此使用霍頓卡勞的火花檢測基地: https://github.com/holdenk/spark-testing-base

回答

1

移交此的 「正常」 的方式是定義外類爲了可以被serilizable化,除了測試之外,這是一個不好的練習,因爲你不想發送大量數據。

+0

更一般的方法是使用靜態函數(將它們放在伴隨對象中) – Holden