实现Spark DStream时返回类型重载

时间:2016-08-24 09:24:48

标签: scala apache-spark overloading spark-streaming data-science

目前正在尝试实现我自己的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

1 个答案:

答案 0 :(得分:1)

  1. 您缺少DStream的类型参数(这是错误消息中的Nothing来自); 2. compute应返回Option[RDD[Something]],而不只是RDD[Something]; 3.您还需要定义dependenciesslideDuration
  2. 所以变化最小的是

    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
    }
    
相关问题