我正在尝试通过 Spark 2.0 中的函数访问 HashMap,但如果我并行化列表,它将失败。如果我不这样做,它会起作用,如果我不使用案例类,它会起作用。
这是我正在尝试做的一些示例代码:
case class TestData(val s: String)
def testKey(testData: TestData) {
println(f"Current Map: $myMap")
println(f"Key sent into function: $testData")
println("Key isn't found in Map:")
println(myMap(testData)) // fails here
}
val myList = sc.parallelize(List(TestData("foo")))
val myMap = Map(TestData("foo") -> "bar")
myList.collect.foreach(testKey) // collect to see println
这是确切的输出:
Current Map: Map(TestData(foo) -> bar)
Key sent into function: TestData(foo)
Key isn't found in Map:
java.util.NoSuchElementException: key not found: TestData(foo)
上面的代码与我正在尝试做的类似,除了案例类更复杂并且 HashMap 将列表作为值。同样在上面的示例中,我使用“收集”以便输出打印语句。样品在没有收集的情况下仍然给出相同的错误,但没有打印。
hashCodes 已经匹配,但我尝试为案例类覆盖 equals 和 hashCode,同样的问题。
这是使用 Databricks,所以我不相信我可以访问 REPL 或 spark-submit。