Scala Spark&;斯卡拉

Scala Spark&;斯卡拉,scala,apache-spark,functional-programming,case-class,Scala,Apache Spark,Functional Programming,Case Class,在Spark&Scala中,将逻辑方法直接放在case类上还是放在伴随对象中更有效?例如: 最终案例类RichInt(x:Int){ def isLarge:Boolean=x>RichInt.largeInt } 对象RichInt{ 私人val largeInt:Int=5 } 对 final case类SlimInt(x:Int){ 对象精简{ 私人val largeInt:Int=5 def isLarge(slimInt:slimInt):布尔={ slimInt.x>largeIn

在Spark&Scala中,将逻辑方法直接放在case类上还是放在伴随对象中更有效?例如:

最终案例类RichInt(x:Int){
def isLarge:Boolean=x>RichInt.largeInt
}
对象RichInt{
私人val largeInt:Int=5
}

final case类SlimInt(x:Int){
对象精简{
私人val largeInt:Int=5
def isLarge(slimInt:slimInt):布尔={
slimInt.x>largeInt
}
}

这些方法的调用方式不同(
SlimInt.isLarge(SlimInt)
richInt.isLarge
),后者可能更直观,但一种模式与另一种模式相比是否存在显著的性能损失?

AFAIK调用该方法应该更快,但是差别应该很小,JIT应该很好地内联这两者,这并不重要。因此,除非你通过进行密集的基准测试来找到相反的证据,否则就使用一种更容易维护代码的方法。如果在spark中完全删除伴生对象是可取的,我也不会感到惊讶,但我不知道。他们将引入一个注释来强制一个成员是“静态的”。我听说最好将方法放在case类之外,因为这样可以减少编码器的大小。我不是100%确定。AFAIK调用该方法应该更快,但是差异应该很小,JIT应该能很好地内联这两种方法,这并不重要。因此,除非你通过进行密集的基准测试来找到相反的证据,否则就使用一种更容易维护代码的方法。如果在spark中完全删除伴生对象是可取的,我也不会感到惊讶,但我不知道。他们将引入一个注释来强制一个成员是“静态的”。我听说最好将方法放在case类之外,因为这样可以减少编码器的大小。我不是100%肯定。