目前正在尝试实现我自己的ApacheSpark V2.0 DStream实现
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.Time
class MQTTDStream[T](ssc: StreamingContext) extends DStream(ssc) {
override def compute(validTime: Time): RDD[Int] = { ssc.sparkContext.parallelize(Array(1, 2, 3), 1) }
}
我的eclipse环境中的编译器没问题。但我将代码粘贴到IBM DSExperience中的jupyter笔记本中并收到以下错误:
名称:编译错误消息:: 21:错误:重写方法 在类DStream中计算类型(validTime: org.apache.spark.streaming.Time)选项[org.apache.spark.rdd.RDD [没有]]; 方法计算具有不兼容的类型 override def compute(validTime:Time):RDD [Int] = {ssc.sparkContext.parallelize(Array(1,2,3),1)} ^:20:错误:类MQTTDStream需要是抽象的,因为:它有2个未实现的成员。 /** 正如所见 从类MQTTDStream中,缺少的签名如下。 *对于 方便,这些可用作存根实现。 * / def 依赖项:List [org.apache.spark.streaming.dstream.DStream [_]] = ??? def slideDuration:org.apache.spark.streaming.Duration = ???
class MQTTDStream[T](ssc: StreamingContext) extends DStream(ssc) { ^ StackTrace:
编辑:31.8.16
现在我已经取得了一些进展:
abstract class MQTTDStream[T](ssc: StreamingContext) extends DStream(ssc) {
override def compute(validTime: Time): Option[RDD[T]] =
Some(ssc.sparkContext.parallelize(Seq(1, 2, 3), 1))
override def dependencies = Nil
override def slideDuration = Seconds(1) // just an example
}
给我:
类型不匹配;发现:Int(1)要求:T
答案 0 :(得分:1)
DStream
的类型参数(这是错误消息中的Nothing
来自); 2. compute
应返回Option[RDD[Something]]
,而不只是RDD[Something]
; 3.您还需要定义dependencies
和slideDuration
。所以变化最小的是
class MQTTDStream[T](ssc: StreamingContext) extends DStream[Int](ssc) {
override def compute(validTime: Time): Option[RDD[Int]] =
Some(ssc.sparkContext.parallelize(Array(1, 2, 3), 1))
override def dependencies = Nil
override def slideDuration = Seconds(1) // just an example
}