Apache Spark中的案例類相等為什么Spark中的模式匹配與Scala中的模式匹配不同?參見下面的示例...函數(shù)f()試圖在類上進(jìn)行模式匹配,該類在Scala REPL中有效,但在Spark中失敗,并導(dǎo)致所有“ ???”。 f2()是一種解決方法,可以在使用的Spark中獲得所需的結(jié)果.isInstanceOf(),但是我知道這在Scala中是不好的形式。在此情況下,Spark中的模式正確匹配方面的任何幫助將不勝感激。abstract class a extends Serializable {val a: Int}case class b(a: Int) extends a
case class bNull(a: Int=0) extends a
val x: List[a] = List(b(0), b(1), bNull())val xRdd = sc.parallelize(x)嘗試在Scala REPL中可用但在Spark中失敗的模式匹配def f(x: a) = x match {
case b(n) => "b"
case bNull(n) => "bnull"
case _ => "???"}解決方法在Spark中起作用,但格式不正確(我認(rèn)為)def f2(x: a) = {
if (x.isInstanceOf[b]) {
"b"
} else if (x.isInstanceOf[bNull]) {
"bnull"
} else {
"???"
}}查看結(jié)果xRdd.map(f).collect //does not work in Spark
// result: Array("???", "???", "???")xRdd.map(f2).collect // works in Spark
// resut: Array("b", "b", "bnull")x.map(f(_)) // works in Scala REPL
// result: List("b", "b", "bnull")使用的版本... Spark結(jié)果在spark-shell中運(yùn)行(在AWS EMR-4.3上為Spark 1.6)在SBT 0.13.9中為Scala REPL(Scala 2.10.5)
Apache Spark中的案例類相等
溫溫醬
2019-09-26 11:20:42