我有一个 AWS EMR 集群(emr-4.2.0,Spark 1.5.2),我从 aws cli 提交步骤。我的问题是,如果 Spark 应用程序失败,那么 YARN 会尝试再次运行该应用程序(在同一 EMR 步骤下)。我怎样才能防止这种情况?
我试图设置--conf spark.yarn.maxAppAttempts=1,它在 Environment/Spark Properties 中正确设置,但它不会阻止 YARN 重新启动应用程序。
我想知道是否有充分的理由使用子类型作为函数类型参数?让我们考虑以下示例:
scala> trait Animal { def sound: String }
defined trait Animal
scala> def f1[T <: Animal](a: T) = a.sound
f1: [T <: Animal](a: T)String
scala> def f2(a: Animal) = a.sound
f2: (a: Animal)String
Run Code Online (Sandbox Code Playgroud)
f1比f2有一些优势吗?
scala> object Test {
def unapply[L,R](v: (L, R)) = Some(v)
}
defined object Test
scala> (1, 2) match {
case 1 Test 2 => println("First")
case Test((1, 2)) => println("Second")
case _ => println("Third")
}
First
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么第一种情况对元组的两个值之间的对象起作用吗?