当前位置: 首页 > 知识库问答 >
问题:

实现Spark数据流时的返回类型重载

陶博耘
2023-03-14

目前正在尝试实现我自己的ApacheSpark V2实现。0数据流

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笔记本上,并得到以下错误:

名称:编译错误消息e::21:错误:类中的重写方法计算DStream的类型(validTime:org.apache.spark.streaming.Time)选项[org.apache.spark.rdd.RDD[无]];方法计算有不兼容的类型重写def计算(validTime: Time): RDD[Int]={ssc.sparkContext.parallelize(Array(1, 2, 3), 1)}^: 20:错误:类MQTTDStream需要是抽象的,因为:它有2个未实现的成员。/**从类MQTTDStream中看到,缺少的签名如下所示。*为方便起见,这些可用作存根实现。*/def依赖项:列表[org.apache.spark.streaming.dstream.DStream[_]]=?? def幻灯片持续时间:org.apache.spark.streaming.持续时间=???

   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个答案

濮阳奇逸
2023-03-14
  1. 您缺少DStream的类型参数(这是错误消息中的来源);2.comute应该返回一个Option[RDD[某物]],而不仅仅是RDD[某物];3.您还需要定义依赖项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
}
 类似资料:
  • 假设我想写一个函数,它可以接受一个参数,这个参数可以是null类型,也可以是非null类型。如果参数不可为null,则返回类型也应不可为null。类似地,如果参数是可空类型,那么返回类型也应该是可空类型。 以下是我为实现这一职能所做的尝试: 函数签名似乎是正确的,因为它在调用站点上实现了所需的行为,例如: 即返回类型确实由参数类型以正确的方式确定。 然而,我的问题在于函数的实现。如果不将返回值强制

  • 问题内容: 如下代码: 产生以下错误: 错误CS0738:“ InheritanceTest.MyData”未实现接口成员“ InheritanceTest.ISomeData.Data”。’InheritanceTest.MyData.Data’无法实现’InheritanceTest.ISomeData.Data’,因为它没有匹配的返回类型’System.Collections.Generic

  • 我正在尝试一个非常基本(人为)的条件类型函数,但遇到了意外错误: 我认为这是一个非常简单的条件类型用法,所以不确定发生了什么。有什么想法吗?

  • 我有一个匿名函数,如下所示: 我想指定cb必须返回一个布尔值,但我是一个打字稿新手,不知道我是否可以(或者即使我这样做或不这样做会对解析器产生影响)。 我该怎么做?

  • 问题内容: 如何在实现类中强制执行方法getFoo(),返回相同实现类类型的列表。 现在,实现Bar的类将返回实现Bar的任何类的对象。我想使其更加严格,以便实现Bar的类在getFoo()中仅返回其类型的对象列表。 问题答案: 不幸的是,这不能由Java的类型系统强制执行。 但是,您可以通过使用以下方法来达到非常接近的效果: 然后您的实现类可以像这样实现它: 但是没有什么可以阻止另一个类这样做:

  • 数字类型 ByteType:代表一个字节的整数。范围是-128到127 ShortType:代表两个字节的整数。范围是-32768到32767 IntegerType:代表4个字节的整数。范围是-2147483648到2147483647 LongType:代表8个字节的整数。范围是-9223372036854775808到9223372036854775807 FloatType:代表4字节的单