好吧,我问过一个有点类似的问题涉及到星火内部如何处理异常,但我当时的例子是真不明白还是完整的.那里的答案指向了某个方向,但我无法解释一些事情.
我已经设置了一个虚拟火花流媒体应用程序,在转换阶段,我有一个俄罗斯轮盘表达式,可能会或不会抛出异常.如果抛出异常,我会停止Spark流式上下文.就是这样,没有其他逻辑,没有RDD转变.
object ImmortalStreamingJob extends App {
val conf = new SparkConf().setAppName("fun-spark").setMaster("local[*]")
val ssc = new StreamingContext(conf, Seconds(1))
val elems = (1 to 1000).grouped(10)
.map(seq => ssc.sparkContext.parallelize(seq))
.toSeq
val stream = ssc.queueStream(mutable.Queue[RDD[Int]](elems: _*))
val transformed = stream.transform { rdd =>
try {
if (Random.nextInt(6) == 5) throw new RuntimeException("boom")
else println("lucky bastard")
rdd
} catch {
case e: Throwable =>
println("stopping streaming context", e)
ssc.stop(stopSparkContext = true, stopGracefully = false)
throw e
}
}
transformed.foreachRDD { …Run Code Online (Sandbox Code Playgroud) 我有一个隐式参数定义为:
class Test(implicit one: String)
Run Code Online (Sandbox Code Playgroud)
我想像这样实例化该对象:
val grr = new Test("aha")
Run Code Online (Sandbox Code Playgroud)
我得到以下异常.
error: too many arguments for constructor Test: ()(implicit one: String)Test
val grr = new Test("aha")
Run Code Online (Sandbox Code Playgroud)
但如果我这样称呼它
val grr = new Test()("haha")
grr: Test = Test@3bd40a57
Run Code Online (Sandbox Code Playgroud)
我得到一个Test对象.
为什么Scala实例化隐式方法要求您在此实例中使用空参数调用对象?为什么会为此类对象实例显示隐式空白参数列表?